Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Resultados diferentes em sqlfiddle.com 5.5.30 e MariaDB 5.5.31


Receio não ter o MariaDB à mão, mas você poderia tentar o seguinte apenas para ver como as variáveis ​​do usuário são geradas:-
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 - Fazendo um pouco de investigação olhando seus resultados, parece que o MariaDB ignorou o ORDER BY na subconsulta. Portanto, o número de sequência está em uma ordem aleatória e também é redefinido quando o pid muda (o que acontece aleatoriamente devido à ordem não ser fixa). Um pouco do google e parece que esse é um recurso deliberado do MariaDB. O padrão SQL define uma tabela como um conjunto não ordenado de linhas e uma sub-seleção é tratada como uma tabela, portanto, a ordem por é ignorada - https://kb.askmonty.org/en/why-is-order-by-in-a-from-subquery -ignorado/ .

É um pouco de desvantagem. Não tenho certeza se há um trabalho em torno, pois não consigo pensar em um no momento. Para o problema original com o qual isso deveria lidar, acho que seria necessário usar subseleções correlacionadas que provavelmente não seriam eficientes.