sql >> Base de Datos >  >> RDS >> Mysql

Resultados diferentes en sqlfiddle.com 5.5.30 y MariaDB 5.5.31

Me temo que no tengo MariaDB a mano, pero podría intentar lo siguiente solo para ver cómo se generan las variables de usuario:-

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 

EDITAR:al investigar un poco al observar sus resultados, parece que MariaDB ha ignorado ORDER BY en la subconsulta. Por lo tanto, el número de secuencia está en un orden aleatorio y también se restablece cuando cambia el pid (lo que ocurre al azar debido a que el orden no está fijo). Un poco de Google y parece que esta es una característica deliberada de MariaDB. El estándar SQL define una tabla como un conjunto desordenado de filas, y una subselección se trata como una tabla, por lo que se ignora el orden - https://kb.askmonty.org/es/por-que-se-ordena-por-en-una-subconsulta -ignorado/ .

Es un poco una desventaja. No estoy seguro de que haya una solución alternativa, ya que no puedo pensar en una en este momento. Para el problema original con el que se trataba, creo que sería necesario usar subselecciones correlacionadas que probablemente no serían eficientes.