Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Różne wyniki w sqlfiddle.com 5.5.30 i MariaDB 5.5.31

Obawiam się, że nie mam pod ręką MariaDB, ale czy mógłbyś wypróbować poniższe, aby zobaczyć, jak są wyprowadzane zmienne użytkownika:-

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 

EDYTUJ — Po przeprowadzeniu dochodzenia, patrząc na Twoje wyniki, wydaje się, że MariaDB zignorowała ORDER BY w podzapytaniu. W związku z tym numer sekwencyjny jest w kolejności losowej, a także resetuje się, gdy zmienia się pid (co dzieje się losowo, ponieważ kolejność nie jest ustalona). Trochę google i wygląda na to, że jest to celowa funkcja MariaDB. Standard SQL definiuje tabelę jako nieuporządkowany zestaw wierszy, a wybór podrzędny jest traktowany jako tabela, dlatego kolejność według jest ignorowana - https://kb.askmonty.org/en/dlaczego-jest-zamówienie-z-podzapytania-z-podzapytania -ignorowane/ .

To trochę wada. Nie jestem pewien, czy jest jakieś rozwiązanie, ponieważ w tej chwili nie mogę o nim wymyślić. Myślę, że w przypadku pierwotnego problemu, z którym to miało się zmierzyć, konieczne byłoby użycie skorelowanych podrzędnych selekcji, które prawdopodobnie nie byłyby wydajne.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyszukaj MySQL i zamień tekst w polu

  2. Jak ustawić limit czasu zapytania ActiveRecord dla mysql?

  3. tworzenie tablicy z bazy danych

  4. Znajdź zakresy dat nakładające się w tej samej tabeli dla określonego użytkownika MySQL

  5. Przykład pętli w MySQL