SQL - Alle Felder + Anzahl eines Feldes in anderer Tabelle

cake4k

Grünschnabel
Hey,

ich habe folgendes Problem:

1. Tabelle "a":
a_id (PK)
name

2. Tabelle "b":
b_id (PK)
a_id (FK)
beschreibung

SELECT a.name, COUNT(b.beschreibung) FROM a, b WHERE a.a_id = b.a_id

Das Problem der Abfrage:
Es werden nur Daten angezeigt, wo Daten in Tabelle "b" in Beziehung stehen.

Ich möchte:
Das alle namen in Tabelle "a" in einer Schleife ausgegeben werden inkl. deren COUNT auch wenn kein Wert in Tabelle "b" eingetragen ist (dann soll der COUNT 0 sein).
Wie löse ich das Problem?

Danke im vorraus!
 
kein inner join sondern left join

SQL:
 SELECT a.name, COUNT(b.beschreibung) FROM a LEFT JOIN b ON a.a_id = b.a_id GROUP BY a.name
 
Zuletzt bearbeitet von einem Moderator:
Okay, das hat funktioniert.
Dabei ist mir ein weiteres problem aufgefallen.

Bezogen auf den COUNT möchte ich einschränkungen vornehmen wie z.B.
WHERE b.beschreibung = 'xyz'

und trotzdem sollen von der tabelle 'a' alle Namen angezeigt werden
 
genau, entweder:

SQL:
 SELECT a.name, COUNT(b.beschreibung) FROM a LEFT JOIN b ON a.a_id = b.a_id AND b.beschreibung = 'xyz' GROUP BY a.name

oder:
SQL:
 SELECT a.name, COUNT(b.beschreibung) FROM a LEFT JOIN (SELECT * FROM b WHERE beschreibung = 'xyz') b ON a.a_id = b.a_id GROUP BY a.name
 
Zuletzt bearbeitet von einem Moderator:
Zurück