Gleiche SQL-Abfrage, unterschiedliche Ergebnisse MySQL und PG

juedan

Benutzer
Beiträge
6
Hallo Forum,

gerade eben habe ich mich registriert, weil ich ein sehr seltsames Problem habe, das ich weder verstehe noch für das ich eine Lösung finde. Achtung: Posting ist etwas lang! Folgende Query:
Code:
SELECT DISTINCT t_landkreise.warncellid,t_landkreise.name,t_landkreise.blkz,
        wm.severity,wm.severity_nr,wm.areacolor,wm.headline,wm.ii,wm.warngroup,wm.urgency,wm.sent,wm.colorindex
FROM t_landkreise
    INNER JOIN (
        SELECT t_warnmeldung.* FROM t_warnmeldung
        INNER JOIN (
            SELECT t_warnmeldung.warncellid,t_warnmeldung.urgency,MAX(t_warnmeldung.warngroup_nr + (16000*t_warnmeldung.severity_nr)) AS max_nr
            FROM t_warnmeldung
            WHERE (t_warnmeldung.warncellid < 400000000 OR t_warnmeldung.warncellid >= 500000000)
            GROUP BY t_warnmeldung.warncellid,t_warnmeldung.urgency
            ORDER BY t_warnmeldung.warncellid ASC,t_warnmeldung.urgency DESC
        )
        AS t_max
        ON (t_warnmeldung.warngroup_nr + (16000*t_warnmeldung.severity_nr))=t_max.max_nr AND t_warnmeldung.warncellid=t_max.warncellid
        ORDER BY t_warnmeldung.warncellid ASC,t_warnmeldung.colorindex DESC
    ) AS wm
    ON t_landkreise.warncellid=wm.warncellid
    WHERE (t_landkreise.c_lon >= 9.6714000000000002 AND t_landkreise.c_lat >= 47.2701236046999966 AND t_landkreise.c_lon <= 13.0986605891510006 AND t_landkreise.c_lat <= 47.9926999999999992)
        
    ORDER BY  t_landkreise.warncellid ASC

liefert bei PostgreSQL das erwartete Ergebnis. Bei MySQL allerdings nicht, obwohl der Datenbestand derselbe ist und die Tabellen identisch aufgebaut sind.
Ergbnis MySQL (nicht richtig)
Code:
["warncellid"]=>string(9) "108436000", ["group"]=>string(4) "WIND"
["warncellid"]=>string(9) "109172000", ["group"]=>string(4) "WIND"
["warncellid"]=>string(9) "109173000", ["group"]=>string(4) "WIND"
["warncellid"]=>string(9) "109180000", ["group"]=>string(4) "WIND"
["warncellid"]=>string(9) "109182000", ["group"]=>string(4) "WIND"

Ergbnis PostgreSQL (so muss es sein):
Code:
["warncellid"]=>string(9) "108436000", ["group"]=>string(4) "WIND"
["warncellid"]=>string(9) "109172000", ["group"]=>string(4) "THAW"
["warncellid"]=>string(9) "109173000", ["group"]=>string(4) "THAW"
["warncellid"]=>string(9) "109180000", ["group"]=>string(4) "THAW"
["warncellid"]=>string(9) "109182000", ["group"]=>string(4) "THAW"

Es geht mir nicht um die Effektivität der Abfrage, sondern um die unterschiedlichen Ergebnisse.

Schon einmal vielen Dank für die Antworten und schon einmal schöne Weihnachtstage

JueDan
 
Werbung:
  • Du hast ja eine Lösung, verwende PostgreSQL, ist eh besser
  • Dein SQL und das Ergebniss passen nicht zusammen, im Select sind 11 Spalten, im Result (ist das ein vardump von PHP?) nur 2
  • mehr Kontext, z.B. Tabellendefinitionen und Beispieldaten, zum nachvollziehen wären sinnvoll
  • in PG könntest Du zudem PostGIS verwenden
 
Mal so als Schuß aus der Hüfte: in MySQL hast Du nicht nach allen Spalten gruppiert (dort, wo Du mit max() aggregierst), MySQL erkennt das nicht als Fehler und liefert ein zufälliges, meist falsches Resultat.
 
Hallo akretschmer,

  • Du hast ja eine Lösung, verwende PostgreSQL, ist eh besser
  • Dein SQL und das Ergebniss passen nicht zusammen, im Select sind 11 Spalten, im Result (ist das ein vardump von PHP?) nur 2
  • mehr Kontext, z.B. Tabellendefinitionen und Beispieldaten, zum nachvollziehen wären sinnvoll
  • in PG könntest Du zudem PostGIS verwenden

ad 1: Mein Hoster hat nur MySQL
ad 2: Wenn ich alle Spalten des Ergebnisses posten würde, wird es unleserlich, daher nur die relevanten Spalten
ad 3: Wie ich eingangs erwähnt habe, sind die Tabellen identisch aufgebaut: gleiche Datentypen, gleiche Feldlängen, gleiche primary keys
ad 4: Nein kann ich nicht, weil mein Hoster es für MySQL nicht anbietet.

Grüßle JueDan
 
Werbung:
Zurück
Oben