Left Join Nur ausführen wenn eine Spalte nicht NULL ist

HuRaHoRRe

Erfahrenes Mitglied
Hi

Ich möchte eine Abfrage machen und darin nur ein Left Join machen, wenn die Spalte teatigkeit_id nicht null ist.

Ich habe es so versucht, funktioniert leider nicht.
Ich denke es ist was total falsch an der syntax.

PHP:
$sql = 'SELECT  i.kommentar As `text`, ' . 
					'  t.tae_bezeichnung, k.kos_bezeichnung '.
					'FROM CASE WHEN ist_verrechnung.taetigkeit_id IS NULL  THEN ist_verrechnung i'.
					'ELSE (ist_verrechnung i LEFT JOIN tae_taetigkeit t ' .
					'  ON (i.taetigkeit_id=t.tae_id)) END ' .
					'  LEFT JOIN kos_kostengruppe k ON t.tae_kos_id=k.kos_id ' .
					'WHERE i.verrechnungsart=1 AND length(i.kommentar)>0 ' .
					'  AND datum BETWEEN "' . date('Y-m-d', $start) . '" AND "' .
					  date('Y-m-d', $end) . '";';

Vielen Dank
 
Hmm, wieso nimmst du statt dem ersten Left Join kein Inner Join?

Oder gibt es in der ist_verechnung.taetigkeit.id Spalte Werte die nicht in tae_taetigkeit.tae_id vorkommen. Abgesehen von den Null Werten.
 
Hallo

ich persönlich habe noch niemals when/then in einer sql-abfrage verwendet und bezweifle ob das geht.
Um Datensätze auszuschliessen die NULL sind benutze ich das Statement:

Where teatigkeit_id is not null

Grüsse, Tecla
 
Vielen Dank für die Antworten.

Es ist so das in der ist_verrechnung.teateigkeit_id nicht immer etwas drin ist, dies kommt darauf an ob es ein Innenauftrag, Kundenauftrag oder sonst etwas ist und ich das Join halt nur ausführen kann wenn da ein Wert vorhanden ist.
Ansonsten werden alle Datensätze welche keinen Wert in dem Feld haben nicht angezeigt, ich möchte aber trotzdem, falls ein Wert vorhanden ist die Daten aus der anderen Tabelle ausgeben können.

Vielleicht überlege ich auch zu weit aber naja das mit dem where geht meiner Meinung nach in der Form hier nicht.

Edit: So bin jetzt mal aufem Heimweg, also nicht wundern wenn ich nicht gleich Antwort gebe :)
 
Zuletzt bearbeitet:
Also willst du eigentlich ja nen Left Join.

Ein Left Join verbindet 2 Tabellen über ein gewisses Kriterium. Falls dies nicht zutrifft, dann bleiben die Zeilen der ersten Tabelle in der Abfrage stehen.

Also bekommst du bei allen die in ist_verrechnung.taetigkeit_id was drinstehen haben die korrespondierende Zeile der tae_taetigkeit Tabelle angehängt. Wenn Null in taetigkeit_id steht, dann bleibt die Zeile im Resultset aber es wird nichts gejoint.

Falls ich es immer noch nicht verstanden hab, dann wärn n paar Beispieldatensätze und das gewünschte Ergebnis hilfreich :)
 
Aha in dem Fall wird auch was ausgegeben wenn das Left Join keine passende Id finden kann?

Mhh in dem Fall muss die Ursache meines Problems an einem anderen Ort liegen :rolleyes:

Vielen Dank
 
Zurück