Mysql
 sql >> Base de données >  >> RDS >> Mysql

Résultats différents dans sqlfiddle.com 5.5.30 et MariaDB 5.5.31

J'ai peur de ne pas avoir MariaDB sous la main, mais pourriez-vous essayer ce qui suit juste pour voir comment les variables utilisateur sont générées :-

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 - En faisant un peu d'enquête en regardant vos résultats, il semble que MariaDB ait ignoré ORDER BY dans la sous-requête. Par conséquent, le numéro de séquence est dans un ordre aléatoire et se réinitialise également lorsque le pid change (ce qu'il fait de manière aléatoire car l'ordre n'est pas fixe). Un peu Google et il semble que ce soit une fonctionnalité délibérée de MariaDB. La norme SQL définit une table comme un ensemble non ordonné de lignes, et une sous-sélection est traitée comme une table, par conséquent l'ordre par est ignoré - https://kb.askmonty.org/en/why-is-order-by-in-a-from-subquery -ignoré/ .

C'est un peu un inconvénient. Je ne suis pas sûr qu'il y ait un travail autour car je ne peux pas penser à un pour le moment. Pour le problème initial que cela devait traiter, je pense qu'il serait nécessaire d'utiliser des sous-sélections corrélées qui ne seraient probablement pas efficaces.