1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Gleiche SQL-Abfrage, unterschiedliche Ergebnisse MySQL und PG

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von juedan, 22 Dezember 2018.

  1. juedan

    juedan Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    • 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
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  4. juedan

    juedan Benutzer

    Hallo akretschmer,

    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
     
  5. juedan

    juedan Benutzer

    Hallo akretschmer,

    Ah ok, ich werde die Query diesbezüglich unter Lupe nehmen - Danke für den Hinweis.

    Grüßle JueDan
     
  6. juedan

    juedan Benutzer

    Hallo akretschmer,

    So jetzt passt es. Die Queries liefen jetzt die gleichen Ergebnisse - so wie es sein soll.

    Ein schönes Weihnachtsfest und guten Rutsch ins neue Jahr

    JueDan
     
    akretschmer gefällt das.
  7. akretschmer

    akretschmer Datenbank-Guru


    War meine Vermutung richtig?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden