Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

ORDER BY có áp dụng trước hay sau DISTINCT không?

Hai điều cần hiểu:

  1. Nói chung, các tập kết quả là không có thứ tự trừ khi bạn chỉ định một ORDER BY mệnh đề; trong phạm vi mà bạn chỉ định một đơn đặt hàng không nghiêm ngặt (tức là ORDER BY trên các cột không phải là duy nhất), thứ tự mà các bản ghi bằng nhau theo thứ tự đó xuất hiện trong tập kết quả là không xác định.

    Tôi nghi ngờ rằng bạn có thể đang chỉ định một đơn đặt hàng không nghiêm ngặt như vậy, đây là gốc rễ của các vấn đề của bạn:hãy đảm bảo rằng đơn đặt hàng của bạn nghiêm ngặt bằng cách chỉ định ORDER BY qua một tập hợp các cột đủ để xác định duy nhất từng bản ghi mà bạn quan tâm về vị trí cuối cùng của nó trong tập kết quả.

  2. DISTINCT có thể sử dụng GROUP BY , điều này làm cho các kết quả được sắp xếp theo thứ tự của các cột được nhóm; nghĩa là, SELECT DISTINCT a, b, c FROM t sẽ tạo ra một tập hợp kết quả xuất hiện như thể ORDER BY a, b, c đã được áp dụng. Một lần nữa, việc chỉ định một thứ tự đủ nghiêm ngặt để đáp ứng nhu cầu của bạn sẽ ghi đè ảnh hưởng này.

Sau bản cập nhật của bạn, hãy ghi nhớ điểm số 2 của tôi ở trên, rõ ràng là tác động của việc nhóm các kết quả để đạt được DISTINCT khiến bạn không thể sắp xếp theo cột không được nhóm p.id; thay vào đó, bạn muốn:

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. Nối dữ liệu vào trường cơ sở dữ liệu MySQL đã có dữ liệu trong đó

  2. Tại sao tôi cần thoát kép (sử dụng 4 \) để tìm dấu gạch chéo ngược (\) trong SQL thuần túy?

  3. làm thế nào để có được tổng số hàng với mysqli

  4. Chế độ xem MySQL

  5. Đây có phải là chức năng khử trùng đầu vào an toàn / mạnh mẽ không?