Abfragenproblem mit MySQL 4.1 und MySQL 5.0
erik
- datenbank
0 Vinzenz Mai0 Erik
Die Abfrage an die DB:
SELECT 1 * (spalte1 IN('wert1', 'wert2', 'wert3') ) + 2 * (spalte1 IN('wert4', 'wert5')) AS daten, SUM(spalte2) as anzahl FROM tabelle GROUP BY spalte1
Die DB:
spalte1|spalte2
wert1|1
wert2|1
wert3|1
wert4|1
wert5|1
Das Problem:
Unter MySQL 4.1.x bekomme ich als Ergebniss 2 Werte.
Unter MySQL 5.0.x bekomme ich als Ergebniss 5 Werte.
Was muss ich ändern damit ich weiterhin nur 2 Werte erhalte.
Hallo Erik,
Du erliegst mit dem folgenden Statement einem typischen MySQL-Problem:
SELECT 1 * (spalte1 IN('wert1', 'wert2', 'wert3') ) + 2 * (spalte1 IN('wert4', 'wert5')) AS daten, SUM(spalte2) as anzahl FROM tabelle GROUP BY spalte1
Alle anderen mir bekannten Datenbankmanagementsysteme weisen dieses Statement als syntaktisch falsch zurück, da die Gruppierung nach Deiner berechneten Spalte 'daten' fehlt. Klar, der Inhalt von 'daten' ist durch den Inhalt von 'spalte1' eindeutig bestimmt, also gruppiere auch nach der 'daten'-Spalte.
spalte1|spalte2
wert1|1
wert2|1
wert3|1
wert4|1
wert5|1Unter MySQL 4.1.x bekomme ich als Ergebniss 2 Werte.
Unter MySQL 5.0.x bekomme ich als Ergebniss 5 Werte.
Welches x bei 5.0.x?
Bei gleichem Datenbestand? Lustig.
Wenn in Spalte1 fünf verschiedene Werte stehen, ist das Ergebnis von MySQL 5.0.x korrekt und das von MySQL 4.1.x falsch.
Stehen in Spalte1 zwei verschiedene Werte, so ist das Ergebnis von MySQL 4.1.x korrekt und das von MySQL 4.1.x falsch.
Was muss ich ändern damit ich weiterhin nur 2 Werte erhalte.
Deine berechnete Spalte 'daten' kann bis zu vier verschiedene Werte annehmen. Möchtest Du nach dieser Spalte gruppieren? Wenn ja, so tue dies - und gruppiere nicht nach 'spalte1'.
Freundliche Grüße
Vinzenz
Die Abfrage lieferte doch gleiche Ergebnisse, aber ein anderer Fehler verursachte in der Anwendung den Effekt.
Die fehlerhafte Abfrage lautete wie folgt (war im Bsp. nur falsch):
SELECT 1 * (spalte1 IN('wert1', 'wert2', 'wert3') ) + 2 * (spalte1 IN('wert4', 'wert5')) AS spalte1, SUM(spalte2) as anzahl FROM tabelle GROUP BY spalte1
das "AS spalte1", wurde nun von der 4er und der 5er Version mal auf die eigentliche Spalte und das andere mal auf den "AS" angewendet im GROUP BY
eine kleine Änderung bei "AS" löste alle Probleme
die Änderung der gruppierung war der entscheidende Denkanstoß, danke