Vinzenz Mai: MySQL: GROUP-BY-"Optimierung"

Beitrag lesen

Hallo Siechfred,

SELECT

COUNT(a.k_name) AS Anzahl,
  b.name AS Elternname
FROM Tabelle1 AS a
  LEFT JOIN Tabelle2 AS b
  ON a.p_id = b.eltern_id
WHERE a.k_name = "Willi"
GROUP BY a.p_id


>   
> erhalte ich keine Fehlermeldung, sondern folgende Ergebnistabelle:  
  
wie ich diesen Bug, euphemistisch als Optimierung bezeichnet, hasse.  
GROUP BY b.name ist erforderlich!  
  

> ~~~

Anzahl | Elternname  

> -------------------  
> 1      | Meier  
> 2      | Schultze

Und es stimmt,

zufällig! Ja, zufällig! Rein zufällig! Nicht vorhersagbar. Lies die MySQL-Doku, http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-fields.html:

<zitat>
In standard SQL, you would have to add customer.name to the GROUP BY clause. In MySQL, the name is redundant if you do not run with the ONLY_FULL_GROUP_BY SQL mode enabled.

Do not use this feature if the columns you omit from the GROUP BY part are not unique in the group! You get unpredictable results.
</zitat>

Reicht dir der zweite Absatz?

zu Meier gehört 1 Willi, zu Schultze gehören 2 Willis. Oder bin ich da jetzt völlig auf dem Holzweg?

Ja. Völlig!

Freundliche Grüße

Vinzenz