sql >> Database >  >> RDS >> Mysql

Verschillende resultaten in sqlfiddle.com 5.5.30 en MariaDB 5.5.31

Ik ben bang dat ik MariaDB niet bij de hand heb, maar zou je het volgende kunnen proberen om te zien hoe de gebruikersvariabelen worden uitgevoerd:-

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 

EDIT - Na wat onderzoek naar uw resultaten te hebben gedaan, lijkt het erop dat MariaDB de ORDER BY in de subquery heeft genegeerd. Vandaar dat het volgnummer in een willekeurige volgorde staat en ook wordt gereset wanneer de pid verandert (wat willekeurig gebeurt omdat de volgorde niet vaststaat). Beetje googlen en het lijkt erop dat dit een opzettelijke functie van MariaDB is. De SQL-standaard definieert een tabel als een ongeordende reeks rijen, en een subselectie wordt behandeld als een tabel, vandaar dat de volgorde op wordt genegeerd - https://kb.askmonty.org/en/why-is-order-by-in-a-from-subquery -genegeerd/ .

Het is een beetje een nadeel. Ik weet niet zeker of er een work around is, want ik kan er momenteel geen bedenken. Voor het oorspronkelijke probleem dat hiermee te maken had, denk ik dat het nodig zou zijn om gecorreleerde subselecties te gebruiken die waarschijnlijk niet efficiënt zouden zijn.




  1. C# windows-toepassingstoegang tot databasegegevens blijven niet behouden bij afsluiten

  2. Alleen numerieke waarden retourneren in SQL Server

  3. Het serialiseerbare isolatieniveau

  4. Datumtijd versus datum en tijd Mysql