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

Czy ORDER BY obowiązuje przed czy po DISTINCT?

Dwie rzeczy do zrozumienia:

  1. Ogólnie mówiąc, zestawy wyników są nieuporządkowane chyba że określisz ORDER BY klauzula; w zakresie, w jakim określisz nie ścisłą kolejność (np. ORDER BY nad nieunikalnymi kolumnami), kolejność, w jakiej rekordy, które są równe w tej kolejności pojawiają się w zestawie wyników, jest niezdefiniowana.

    Podejrzewam, że możesz określać taką nieścisłą kolejność, która jest źródłem twoich problemów:upewnij się, że twoja kolejność jest ścisła, określając ORDER BY nad zestawem kolumn, który jest wystarczający do jednoznacznej identyfikacji każdego rekordu, dla którego zależy Ci na jego końcowej pozycji w zestawie wyników.

  2. DISTINCT może używać GROUP BY , co powoduje, że wyniki są uporządkowane według zgrupowanych kolumn; czyli SELECT DISTINCT a, b, c FROM t wygeneruje zestaw wyników, który wygląda tak, jakby ORDER BY a, b, c został zastosowany. Ponownie, określenie wystarczająco ścisłej kolejności, aby spełnić Twoje potrzeby, unieważni ten efekt.

Po aktualizacji, mając na uwadze mój punkt 2 powyżej, jasne jest, że efekt grupowania wyników w celu uzyskania DISTINCT uniemożliwia następnie uporządkowanie według niezgrupowanej kolumny p.id; zamiast tego chcesz:

SELECT   t.*
FROM     Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skutecznie oczyszczaj tekst wprowadzony przez użytkownika

  2. lokalizacja katalogu danych mysql

  3. Jak używać GROUP BY do łączenia ciągów w MySQL?

  4. Użyj relacyjnych baz danych MySQL na Ubuntu 9.10 (Karmic)

  5. Skopiuj tabelę bez kopiowania danych