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

MySQL select riêng biệt không hoạt động

ORDER BY id DESC mệnh đề, truy vấn được xử lý thay vì như thể nó được viết:

SELECT DISTINCT name, id
  FROM table
 ORDER BY id DESC;

ngoại trừ id các cột không được trả lại cho người dùng (bạn). Tập hợp kết quả phải bao gồm id để có thể đặt hàng bởi nó. Rõ ràng, tập kết quả này có bốn hàng, vì vậy đó là những gì được trả về. (Đạo đức:không sắp xếp theo các cột ẩn - trừ khi bạn biết nó sẽ làm gì với truy vấn của mình.)

Hãy thử:

SELECT DISTINCT name
  FROM table
 ORDER BY name;

(có hoặc không có DESC theo ý thích). Điều đó sẽ chỉ trả về hai hàng.

Nếu bạn cần biết một id đối với mỗi tên, hãy xem xét:

SELECT name, MIN(id)
  FROM table
 GROUP BY name
 ORDER BY MIN(id) DESC;

Bạn có thể sử dụng MAX để có hiệu quả tốt như nhau.

Tất cả điều này áp dụng cho tất cả các cơ sở dữ liệu SQL, bao gồm cả MySQL. MySQL có một số quy tắc cho phép bạn bỏ qua các mệnh đề GROUP BY có kết quả hơi không xác định. Tôi khuyên bạn không nên khai thác tính năng này.

Trong một thời gian dài (thậm chí có thể là bây giờ) tiêu chuẩn SQL không cho phép bạn sắp xếp thứ tự theo các cột không có trong danh sách chọn, chính xác là để tránh nhầm lẫn như thế này. Khi tập kết quả không bao gồm dữ liệu sắp xếp thứ tự, thứ tự của tập kết quả được gọi là 'thứ tự thiết yếu'; nếu tất cả các cột sắp xếp đều xuất hiện trong tập kết quả, thì đó là 'thứ tự không cần thiết' vì bạn có đủ dữ liệu để tự sắp xếp dữ liệu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kế hoạch thực thi không hiệu quả do MySQL InnoDB thực hiện

  2. Khôi phục giao dịch Mysql khi không cập nhật được

  3. Lỗi kiểu dữ liệu số nguyên Mysql Workbench (INT thay đổi> (11))

  4. Node.js và mysql Callback:truy vấn trong cuộc gọi lại truy vấn

  5. Giám sát các truy vấn của người dùng MySQL