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

Risultati diversi in sqlfiddle.com 5.5.30 e MariaDB 5.5.31

Temo di non avere MariaDB a portata di mano, ma potresti provare quanto segue solo per vedere come vengono emesse le variabili utente:-

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 - Facendo un po' di indagine guardando i tuoi risultati, sembra che MariaDB abbia ignorato ORDER BY nella sottoquery. Quindi il numero di sequenza è in un ordine casuale e si azzera anche quando il pid cambia (cosa che accade in modo casuale perché l'ordine non viene corretto). Un po' su Google e sembra che questa sia una caratteristica deliberata di MariaDB. Lo standard SQL definisce una tabella come un insieme non ordinato di righe e una selezione secondaria viene trattata come una tabella, quindi l'ordine per viene ignorato - https://kb.askmonty.org/en/perché-è-ordinato-per-in-a-da-sottoquery -ignorato/ .

È un po' uno svantaggio. Non sono sicuro che ci sia un lavoro in giro perché non riesco a pensarne uno al momento. Per il problema originale che questo doveva affrontare, penso che sarebbe necessario utilizzare selezioni secondarie correlate che probabilmente non sarebbero efficienti.