sql >> Databáze >  >> RDS >> Mysql

Různé výsledky v sqlfiddle.com 5.5.30 a MariaDB 5.5.31

Obávám se, že nemám po ruce MariaDB, ale mohl byste zkusit následující, abyste viděli, jak jsou výstupní uživatelské proměnné:-

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 

UPRAVIT – Při pohledu na vaše výsledky se zdá, že MariaDB ignorovala ORDER BY v dílčím dotazu. Pořadové číslo je tedy v náhodném pořadí a také se resetuje, když se změní pid (což se děje náhodně, protože pořadí není pevně stanoveno). Trochu google a zdá se, že je to záměrná funkce MariaDB. Standard SQL definuje tabulku jako neuspořádanou sadu řádků a dílčí výběr je považován za tabulku, takže pořadí podle je ignorováno - https://kb.askmonty.org/en/why-is-order-by-in-a-from-subquery -ignorováno/ .

Je to trochu nevýhoda. Nejsem si jistý, zda existuje nějaké řešení, protože mě v tuto chvíli nenapadá. Pro původní problém, kterým se toto mělo zabývat, si myslím, že by bylo nutné použít korelované dílčí výběry, což by pravděpodobně nebylo efektivní.




  1. Zařazení do fronty ve zprávách OneWay WCF pomocí Windows Service a SQL Server

  2. Chci spouštěč pro DELETE ze 2 tabulek v MySQL

  3. ClassNotFoundException:com.mysql.jdbc.GoogleDriver

  4. Součtový rozsah dat bez počítání překryvů v mysql