christian Bohl: Join mit Null werten

Ich will 2 Tabellen verknüpfen, wobei die Tabelle mailadrstamm vorang hat.
Das heist es sollen alle Datensätze aus der mailadrstamm angezeigt werden, und wenn es daten in der kassenwawidaten gibt sollen diese mit angezeigt werden. Wenn es keine Daten in der zweiten Tabelle gibt, dann soll trotzdem der Kunde angezeigt werden.

SELECT mailadrstamm.*, sum(kassenwawidaten.Menge) AS smenge,
sum((istvk / menge) * ABS(menge)) as sistvk,
sum((istvk / menge) * ABS(menge))/sum(menge) AS durchschnitt FROM mailadrstamm
Left JOIN kassenwawidaten ON mailadrstamm.Nr = kassenwawidaten.Kundennr
Group by kassenwawidaten.Kundennr order by mailadrstamm.id

Ich bekomme aber immer, egal welche art von Join, nur die Datensätze angezeigt wo es daten in der kassenwawidaten gibt.

Gruß
Christian

  1. Hi,

    Das heist es sollen alle Datensätze aus der mailadrstamm angezeigt werden, und wenn es daten in der kassenwawidaten gibt sollen diese mit angezeigt werden. Wenn es keine Daten in der zweiten Tabelle gibt, dann soll trotzdem der Kunde angezeigt werden.

    http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/#leftright_join

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. Ein spontaner Tip, du gruppierst ein Feld aus der zweiten Tabelle. Dieses kann null sein, dann landen alle Datensätze mit null in der selben Gruppe.
    Vielleicht wird null auch aus dem Ergebnis ausgeschlossen weil GROUP BY das nicht macht? Wüsste ich jetzt nicht auswendig.
    Mach mal die Abfrage ohn GROUP BY und schau ob da alles drin ist was rein soll.

  3. Salve,

    du musst nach mailadrstamm.Nr gruppieren.

  4. moin,

    Ich bekomme aber immer, egal welche art von Join, nur die Datensätze angezeigt wo es daten in der kassenwawidaten gibt.

    du bist ein weiteres opfer des mysql GROUP BY "bugs". jedes andere DBMS würde dir eine fehlermeldung ausgeben, nur mysql geht dabei andere wege. die grundregel lautet, nur spalten in der selektion anzuzeigen, über die du gruppiert hast oder die eine aggregat-funktion benutzen. ist das nicht der fall, gibt es wie gesagt bei professionellen DBMS eine fehlermeldung, bei mysql passiert das nicht und du bekommst je nach konstellation zufällige daten angezeigt.

    dein problem ist also weniger der LEFT JOIN, sondern liegt in der gruppierung. diese kannst du nicht einfach verändern, es hängt davon ab, was du angezeigt haben willst. insofenr müsstst du uns schon im detail mit beispieldaten sagen, was du machen willst.

    Ilja