sql >> Database teknologi >  >> RDS >> Mysql

Forskellige resultater i sqlfiddle.com 5.5.30 og MariaDB 5.5.31

Jeg er bange for, at jeg ikke har MariaDB ved hånden, men kunne du prøve følgende bare for at se, hvordan brugervariablerne udlæses:-

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 - Når man undersøger dine resultater lidt, ser det ud til, at MariaDB har ignoreret ORDER BY i underforespørgslen. Derfor er sekvensnummeret i en tilfældig rækkefølge og nulstilles også, når pid'en ændres (hvilket det gør tilfældigt, fordi rækkefølgen ikke er fastsat). Lidt af en google, og det ser ud til, at dette er et bevidst træk ved MariaDB. SQL-standarden definerer en tabel som et uordnet sæt rækker, og et undervalg behandles som en tabel, derfor ignoreres rækkefølgen efter - https://kb.askmonty.org/en/why-is-order-by-in-a-from-subquery -ignoreret/ .

Det er lidt af en ulempe. Jeg er ikke sikker på, at der er noget, som jeg ikke kan komme i tanke om i øjeblikket. For det oprindelige problem, som dette skulle håndtere, tror jeg, at det ville være nødvendigt at bruge korrelerede undervalg, som sandsynligvis ikke ville være effektive.




  1. JSON_OBJECTAGG() – Opret et JSON-objekt fra forespørgselsresultater i MySQL

  2. Hvordan opretter jeg forbindelse til en MSSQL-database ved hjælp af Perls DBI-modul i Windows?

  3. SQL Server Pre-Login Handshake Acknowledgement Fejl

  4. Oracle-databasegendannelse