Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unterschiedliche Ergebnisse in sqlfiddle.com 5.5.30 und MariaDB 5.5.31

Ich fürchte, ich habe MariaDB nicht zur Hand, aber könnten Sie Folgendes versuchen, nur um zu sehen, wie die Benutzervariablen ausgegeben werden:-

SELECT  *
FROM test_golf_player p
LEFT JOIN 
(
    SELECT pid, leaguepoints, @Sequence:=IF(@PrevPid = pid, @Sequence + 1, 0) AS aSequence, @PrevPid := pid
    FROM
    (
        SELECT pid, leaguepoints
        FROM test_golf_card 
        ORDER BY pid, leaguepoints DESC
    ) Sub1
    CROSS JOIN (SELECT @PrevPid := 0, @Sequence := 0) Sub2
) gC
ON p.pid = gC.pid 
ORDER BY p.name DESC 

BEARBEITEN - Wenn Sie Ihre Ergebnisse ein wenig untersuchen, scheint MariaDB die ORDER BY in der Unterabfrage ignoriert zu haben. Daher befindet sich die Sequenznummer in einer zufälligen Reihenfolge und wird auch zurückgesetzt, wenn sich die PID ändert (was zufällig geschieht, da die Reihenfolge nicht festgelegt ist). Ein bisschen Google und es scheint, dass dies eine absichtliche Funktion von MariaDB ist. Der SQL-Standard definiert eine Tabelle als einen ungeordneten Satz von Zeilen, und eine Unterauswahl wird als Tabelle behandelt, daher wird die Reihenfolge ignoriert - https://kb.askmonty.org/de/warum-ist-order-by-in-einer-unterabfrage -ignoriert/ .

Es ist ein kleiner Nachteil. Ich bin mir nicht sicher, ob es eine Lösung gibt, da mir im Moment keine einfällt. Für das ursprüngliche Problem, mit dem sich dies befassen sollte, wäre es meiner Meinung nach notwendig, korrelierte Unterauswahlen zu verwenden, was wahrscheinlich nicht effizient wäre.