Mysql
 sql >> база данни >  >> RDS >> Mysql

Прилага ли се ORDER BY преди или след DISTINCT?

Две неща, които трябва да разберете:

  1. Най-общо казано, наборите от резултати са неподредени освен ако не посочите ORDER BY клауза; до степента, в която посочите нестрога поръчка (т.е. ORDER BY над неуникални колони), редът, в който записи, които са равни в този ред, се появяват в набора от резултати, е недефиниран.

    Подозирам, че може да посочите такава нестрога поръчка, която е в основата на вашите проблеми:уверете се, че вашата поръчка е стриктна, като посочите ORDER BY върху набор от колони, който е достатъчен за уникално идентифициране на всеки запис, за който се интересувате от крайната му позиция в набора от резултати.

  2. DISTINCT може да използва GROUP BY , което кара резултатите да бъдат подредени по групираните колони; т.е. SELECT DISTINCT a, b, c FROM t ще произведе набор от резултати, който изглежда сякаш ORDER BY a, b, c е приложено. Отново, определянето на достатъчно строг ред, за да отговори на вашите нужди, ще отмени този ефект.

След вашата актуализация, като се има предвид моя точка №2 по-горе, е ясно, че ефектът от групирането на резултатите за постигане на DISTINCT прави невъзможно след това подреждането по негрупираната колона p.id; вместо това искате:

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. Генерирайте изрази CREATE за всички MySql таблици

  2. Преобразувайте mysqli пагинация в подготвена пагинация на изрази

  3. Различни начини за преглед на таблици в MySQL Server

  4. Достъп до MySQL от Python 3:Достъпът е отказан на потребителя

  5. Поддържа ли MS-SQL таблици в паметта?