spicy05: SQL wenn wert ist nicht vorhanden.

Hallo,

ich bräuchte bitte Hilfe.

Name1,Name2, Name3, Straße, Land, Plz und Ort sollten nur aus der Tabelle Adressen_lief entnommen werden wenn der Wert der Spalte ADDR_ID in beiden Tabellen vorhanden ist.
Ansonsten sollten Sie aus der Tabelle Journal entnommen werden.

Armin

select  
'04102013' AS DATUM,  
SHOP_ORDERID AS REF,  
  
'' AS HV,  
  
case JOURNAL.ZAHLART  
when 4 then JOURNAL.BSUMME  
END AS NN,  
  
'' AS GEWICHT,  
  
Case ADRESSEN_LIEF.ADDR_ID  
when >  NULL then  
ADRESSEN_LIEF.NAME1 AS NAME1,  
ADRESSEN_LIEF.NAME2 AS NAME2,  
ADRESSEN_LIEF.NAME3 AS NAME3,  
ADRESSEN_LIEF.STRASSE AS STRASSE,  
ADRESSEN_LIEF.LAND AS LAND,  
ADRESSEN_LIEF.PLZ AS PLZ,  
ADRESSEN_LIEF.ORT AS ORT,  
END  
  
  
'E' AS AVISO  
  
from JOURNAL LEFT JOIN ADRESSEN_LIEF USING (ADDR_ID)  
/*from JOURNAL LEFT JOIN ADRESSEN USING (JOURNAL.KUN_NUM) = (ADRESSEN.KUNNUM1) */  
  
  
where RDATUM >= '2013.01.03' and QUELLE ='3' 
  1. Tach!

    Name1,Name2, Name3, Straße, Land, Plz und Ort sollten nur aus der Tabelle Adressen_lief entnommen werden wenn der Wert der Spalte ADDR_ID in beiden Tabellen vorhanden ist.
    Ansonsten sollten Sie aus der Tabelle Journal entnommen werden.

    Ich würde das mit zwei Abfragen (verbunden mit UNION) lösen, einmal mit der einen Bedingung, und dann nochmal mit der anderen.

    case JOURNAL.ZAHLART
    when 4 then JOURNAL.BSUMME
    END AS NN,

    Es gibt IF(), das ist weniger umständlich zu notieren

    Case ADRESSEN_LIEF.ADDR_ID
    when >  NULL then

    Wann immer NULL in einem Ausdruck auftaucht, ist das Ergebnis NULL. Im booleschen Kontext wird das immer als false gewertet. Egal ob du nun > oder < oder = oder <> beziehungsweise != verwendest, die Bedingung ist nie erfüllt. Für Vergleiche mit NULL gibt es spezielle Operatoren, wie IS NULL oder NOT IS NULL.

    ADRESSEN_LIEF.NAME1 AS NAME1,
    ADRESSEN_LIEF.NAME2 AS NAME2,
    ADRESSEN_LIEF.NAME3 AS NAME3,
    ADRESSEN_LIEF.STRASSE AS STRASSE,
    ADRESSEN_LIEF.LAND AS LAND,
    ADRESSEN_LIEF.PLZ AS PLZ,
    ADRESSEN_LIEF.ORT AS ORT,
    END

    Ein CASE kann immer nur einen Wert liefern, keine Armada aus Feldern. Wenn du das so machen wllst, musst du für jedes Feld einzeln etwas schreiben. Wenn du das so machen willst, schau dir dazu die Funktionen IFNULL() und COALESCE() an.

    dedlfix.