Left Join Problem - fehlende Datensätze

comix2000

Grünschnabel
Ich bin am verzweifeln,

in meiner Ausgabe, zu der ich auch den Code poste, möchte ich mir verschiedene vorgangspositionen anzeigen lassen. Über den Left Join hole ich mir weitere Informationen aus anderen Tabellen.

Ohne left Join verbindung mit vorgangpos_datev werden in diesem Beispiel 5 Datensätze angezeigt.
Mit vorgangpos_datev sind es nur 4 Datensätze. Es fehlt der Datensatz der keinen Inhalt in der Tabelle vorgangpos_datev findet. Warum wird mir der Datensatz nicht trotzdem angezeigt, mit dem Wert "NULL"?

Code:
SELECT * FROM vorgangpos vp 
LEFT JOIN vorgangpos_datev vp2, tree_inhalte t_inh, vorgaenge vg 
ON vp2.inhalt_id = vp.inhalt_id 
    AND  vg.vorgang_id=vp.vorgang_id 
    AND vp.inhalt_id=t_inh.inhalt_id 
WHERE vg.zahlart_id <> 10 AND t_inh.tree_id=31 
    AND vg.datum >='2005-07-27 00:00:00' 
    And vg.datum <= '2005-07-27 23:59:59' 
    AND vg.zahlart_id <> 10
GROUP BY date(vg.datum), t_inh.inhalt_id, vg.vorgangart_id
 
Hallo!

Wenn Du bei Joins Datensätze, die nicht vorhanden sind als "NULL-Datensätze" erhalten möchtest, dann musst du einen OUTER JOIN durchführen. Versuch das doch mal.
 
So?

Code:
SELECT * FROM vorgangpos vp 
LEFT OUTER JOIN vorgangpos_datev vp2, tree_inhalte t_inh, vorgaenge vg 
ON vp2.inhalt_id = vp.inhalt_id 
    AND  vg.vorgang_id=vp.vorgang_id 
    AND vp.inhalt_id=t_inh.inhalt_id 
WHERE vg.zahlart_id <> 10 AND t_inh.tree_id=31 
    AND vg.datum >='2005-07-27 00:00:00' 
    And vg.datum <= '2005-07-27 23:59:59' 
    AND vg.zahlart_id <> 10
GROUP BY date(vg.datum), t_inh.inhalt_id, vg.vorgangart_id

Da erhalte ich immernoch 4 Zeilen
P.S. MySQL
 
Ich habs:

Code:
SELECT * FROM vorgangpos vp 
LEFT JOIN tree_inhalte t_inh, vorgaenge vg 
    ON vg.vorgang_id=vp.vorgang_id 
    AND vp.inhalt_id=t_inh.inhalt_id 

LEFT OUTER JOIN vorgangpos_datev vp2 
ON vp2.inhalt_id = vp.inhalt_id 

WHERE vg.zahlart_id <> 10 AND t_inh.tree_id=31 
    AND vg.datum >='2005-07-27 00:00:00' 
    And vg.datum <= '2005-07-27 23:59:59' 
    AND vg.zahlart_id <> 10
GROUP BY date(vg.datum), t_inh.inhalt_id, vg.vorgangart_id

Danke für den "Outer Join Tip"
 
Zurück