erik: Abfragenproblem mit MySQL 4.1 und MySQL 5.0

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.

  1. 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|1

    Unter 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

    1. 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