Philipp Hasenfratz: MySQL LEFT JOIN. Was geht da genau vor sich?

Beitrag lesen

Halihallo Emil

Mir ist gerade etwas aufgefallen. Ich wollte ein LEFT JOIN machen und alle Tabellen Zählen. Also habe ich COUNT(tabelle1.*) angegeben, aber das führt zu einer Fehlermeldung. Aber mit COUNT(*) funktioniert es.

Nun, das Ergebnis einer SQL-Abfrage ist wieder eine ganz "normale" _einzelne_ Tabelle,
eine Angabe der Tabelle macht also keinen Sinn. COUNT(*) gibt dir einfach die Anzahl
Datensätze in dem SQL-Ergebnis zurück. Zudem sei angemerkt, dass COUNT(*) eine
Aggregatsfunktion ist, demnach eigentlich mit GROUP BY zu verwenden ist[1].

Ein Beispiel, was gleich auch deine Frage beantwortet:

SELECT erste.id, COUNT(*)
FROM erste_tabelle AS erste
     LEFT OUTER JOIN zweite_tabelle AS zweite ON zweite.erste_id=erste.id
GROUP BY erste.id

so kannst du zu jeder erste.id die Anzahl Datensätze in der Tabelle zweite_tabelle
ausgeben lassen, die über zweite.erste_id=erste.id verknüpft werden. Beispiel im
Beispiel: Du hast Kunden, die Artikel bestellten => Wieviele Artikel pro Kunde?

[1] Natürlich geht's auch ohne GROUP BY...

Viele Grüsse

Philipp