SQL-Abfrage über zwei Tabellen funzt nicht
Kalle
- datenbank
0 Kalle0 verona0 Daniela Koller
0 Lude
Hallo, Forum,
seit Tagen versuche ich eine Lösung mit Hilfe des JOIN-Kommandos, aber es klappt nicht. Mein Problem:
Ich habe eine Adress-Tabelle (adr) mit Lieferanten (adr.adr_kz=1) und Kunden (adr.adr_kz=2).
Nun möchte ich alle Kunden sehen. Kein Problem mit
SELECT adr.id, adr.name1 FROM adr WHERE ( adr.adr_kz = 2 ) ORDER BY adr.name1;
In einer zweiten Tabelle sind Rechnungen an die Kunden. Pro Kunde möchte ich wissen, wie viele Rechnungen geschrieben wurden. Auch das klappt:
SELECT kunden_id, count(*) FROM rech GROUP BY rech.kunden_id;
Nun möchte ich ALLE Kunden sehen und ZUSÄTZLICH bei den Rechnungsempfängern die Anzahl der Rechnungen. Doch ich sehe NUR die Rechnungsempfänger, Kunden ohne Rechnung fehlen:
SELECT adr.name1, count(*) FROM adr
INNER JOIN rech ON adr.id = rech.kunden_id
WHERE ( adr.adr_kz = 2 )
GROUP BY adr.name1;
Was mache ich falsch ? Ist JOIN das falsche Wort ?
Liebe Grüße aus Worms, Kalle
Es ist schon seltsam, wie das Formulieren einer Frage hilft, der Lösung näher zu kommen.
Mit LEFT JOIN klappt es schon besser:
SELECT adr.name1, count(*) FROM adr
LEFT JOIN rech ON adr.id = rech.kunden_id
WHERE ( adr.adr_kz = 2 )
GROUP BY adr.name1;
Es sind jetzt ALLE Kunden vorhanden, allerdings ergibt der COUNT auch dann 1, wenn KEINE Rechnung vorhanden ist. Ich lasse mir also zusätzlich die Spalte rech.id ausgeben. Wenn die NULL ist, gibt's keine Rechnung, sonst ist es 1 Rechnung.
SELECT adr.name1, rech.id, count(*) FROM adr ...
Danke, damit komme ich klar. Kalle.
kleiner Tipp.
Schau mal bei PremiumSoft MySQL-Studio nach. Da kannst Du Deine querys grafisch erstellen. Die Demoversion sollte Dir solange Zeit geben, bis Du es raus hast.
Das hat mir auch sehr geholfen.
Gruß
Verona
Hi Kalle
Es sind jetzt ALLE Kunden vorhanden, allerdings ergibt der COUNT auch dann 1, wenn KEINE Rechnung vorhanden ist. Ich lasse mir also zusätzlich die Spalte rech.id ausgeben. Wenn die NULL ist, gibt's keine Rechnung, sonst ist es 1 Rechnung.
SELECT adr.name1, rech.id, count(*) FROM adr ...
Versuch mal aus dem count(*) ein count(rech.id) zu machen. Achtung, ist aber nicht getestet.
Gruss Daniela
Hi,
Nun möchte ich ALLE Kunden sehen und ZUSÄTZLICH bei den Rechnungsempfängern die Anzahl der Rechnungen. Doch ich sehe NUR die Rechnungsempfänger, Kunden ohne Rechnung fehlen:
SELECT adr.name1, count(*) FROM adr
INNER JOIN rech ON adr.id = rech.kunden_id
WHERE ( adr.adr_kz = 2 )
GROUP BY adr.name1;
Du benoetigst einen anderen JOIN: left outer join, right join, full join?
Gruss,
Lude