Seite 1 von 1

GROUP BY - steh ich so auf der Leitung?

Verfasst: 25.06.2004 23:47
von PhilippK
Ich steh hier gerade von einem Problem bei DB Maintenance: eine Funktion gibt mir einen Wert zurück, obwohl sie eigentlich keinen zurückgeben sollte. Hier die Funktion:

Code: Alles auswählen

SELECT u.user_id, Sum( g.group_single_user ) AS group_count
FROM phpbb_users u
  LEFT JOIN phpbb_user_group ug ON u.user_id = ug.user_id
  LEFT JOIN phpbb_groups g ON ug.group_id = g.group_id
GROUP BY u.user_id
HAVING Sum( g.group_single_user ) <> 1 OR IsNull( group_count )
Habe da nun etwas rumgespielt und festgestellt, dass diese Funktion hier:

Code: Alles auswählen

SELECT u.user_id, Sum( g.group_single_user ) AS group_count
FROM phpbb_users u
  LEFT JOIN phpbb_user_group ug ON u.user_id = ug.user_id
  LEFT JOIN phpbb_groups g ON ug.group_id = g.group_id
GROUP BY u.user_id
HAVING group_count <> 1 OR IsNull( group_count )
hingegen einwandfrei funktioniert. Der einzige Unterschied ist der erste Teil des HAVING-Teils.

Ich stehe derzeit gerade gewaltig auf dem Schlauch, wieso dieser Fehler auftritt. Hat da jemand eine Idee?

Hier noch das Ergebnis der ersten Query:

Code: Alles auswählen

user_id | group_count
---------------------
-1      | 1
Es exisitiert in der phpbb_users ein Datensatz mit der ID -1 (der Gast-Account), für den dann genau ein Datensatz in der phpbb_user_group und einer in der phpbb_groups (mit group_single_user = 1) existiert.

Gruß, Philipp

Verfasst: 26.06.2004 21:18
von hope
Also laut SQL-Standard kann man die Aliase nicht in where und having-Klauseln nehmen, daher ist das wohl ein normales verhalten, wobei ich gehört habe das manche mysql4 das können. Und die Doku von mysql das eigentlich bestätigt. Also etwas strange das ganze

Verfasst: 28.06.2004 23:51
von PhilippK
hope hat geschrieben:Also laut SQL-Standard kann man die Aliase nicht in where und having-Klauseln nehmen, daher ist das wohl ein normales verhalten, wobei ich gehört habe das manche mysql4 das können. Und die Doku von mysql das eigentlich bestätigt. Also etwas strange das ganze
Tja, das hatte ich auch gedacht:
MySQL Manual hat geschrieben:Columns selected for output can be referred to in ORDER BY and GROUP BY clauses using column names, column aliases, or column positions
Nun, irgendwie will das mir sowohl auf dem Produktiv-System (3.23.58) als auch auf dem Test-System (4.0.20-nt) nicht :-?

Gruß, Philipp