Einträge einer zweiten Tabelle zählen
Kalle_B
- datenbank
Hallöle,
ich habe eine Adresstabelle Jede Adresse kann in einer zweiten Tabelle 0..n zugehörige Termine haben. Ich möchte die Anzahl der Termine wissen.
SELECT
adr.*
,count(trm.id) anz_termine
FROM adressen adr
LEFT JOIN termine trm ON trm.veranstalter_id = adr.id
GROUP BY adr.id
Durch den LEFT JOIN wird die Anzahl der gefundenen Adresssätze potenziert und ich muss sie mit GROUP BY wieder reduzieren.
Geht das nicht eleganter und direkter? Irgendwie die Adressen holen und pro Adresse die Summe?
Gruß, Kalle
Hi,
Geht das nicht eleganter und direkter? Irgendwie die Adressen holen und pro Adresse die Summe?
ja, per Subselect. Ob das der Performance des Statements gut tut, musst Du testen.
Cheatah
moin,
Geht das nicht eleganter und direkter? Irgendwie die Adressen holen und pro Adresse die Summe?
mal davon abgesehen, das jede andere dbms ausser mysql bei der abfrage eine fehlermeldung ausgibt, gibt es sicherlich eine elegantere lösung, nämlich mit einer korrelierten unterabfrage, die auch überall funkioniert. und mich würde es auch nicht wundern, wenn diese wesentlich performanter ist.
SELECT adr.*,
(SELECT COUNT(*)
FROM termine t
WHERE t.veranstalter_id = a.id
) anz_termine
FROM adressen a
;
Ilja
Hallo, Ilja,
SELECT adr.*,
(SELECT COUNT(*)
FROM termine t
WHERE t.veranstalter_id = a.id
) anz_termine
FROM adressen a
Danke, das sieht vernünftig aus. Bei 197 Adressen und 820 Terminen erhöht der Subselect die Programmlaufzeit von 1,5 auf 2,2 sec.
Und wenn ich dann noch einen Key auf veranstalter_id lege, bleibt's bei 1,5
Kalle