Hallo,
ich hoffe ihr könnt mir einem tip zur optimierung meiner mysql-abfrage in puncto joins geben. folgende tabellen:
tab_name
id_name name
1 xxx
2 yyy
3 zzz
4 xxxtab_werte
id wert
1 11
1 12
2 13
3 12
3 11
3 10
4 13tab_wert_name
wert_id wert_name
10 abc
11 def
12 ghi
13 jklwie bestimme ich die anzahl von "wert" des namens "xxx"?
SELECT wert_name, COUNT(wert) FROM tab_name, tab_werte, tab_wert_name WHERE wert_id = wert AND id_name = id AND name = "xxx"
Was erwartest Du hier als Ergebnis für wert_name und COUNT(wert)? Die Abfrage ist nämlich syntaktisch falsch, weil eine Aggregatfunktion eine Gruppierung benötigt. MySQL erlaubt das trotzdem, bringt allerdings keine _eindeutigen_ Ergebnisse. Der Nutzer xxx hat:
wert_name wert
def 11
ghi 12
jkl 13
Soll count jetzt 3 bringen? Welchen Wert soll dann wert_name haben?
Korrekte Syntax wäre:
SELECT Count(tab_werte.wert) FROM tab_name INNER JOIN (tab_werte INNER JOIN tab_wert_name ON tab_werte.wert = tab_wert_name.wert_id) ON tab_name.id_name = tab_werte.id
GROUP BY tab_name.name HAVING tab_name.name="xxx";
Die Performance hängt allerdings hauptsächlich von den Indexen ab. Hier wären welche auf tab_werte.id, tab_werte.wert, tab_name.id_name, tab_name.name und tab_wert_name.wert_id wirksam.
viele Grüße
Axel