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

MySQL - Chọn một cột không có trong Nhóm theo

Đúng là tính năng này cho phép một số truy vấn không rõ ràng và âm thầm trả về một tập hợp kết quả với một giá trị tùy ý được chọn từ cột đó. Trong thực tế, nó có xu hướng là giá trị từ hàng trong nhóm được lưu trữ vật lý trước.

Các truy vấn này không mơ hồ nếu bạn chỉ chọn các cột phụ thuộc vào (các) cột trong tiêu chí GROUP BY. Nói cách khác, nếu chỉ có một giá trị riêng biệt của cột "không rõ ràng" trên mỗi giá trị xác định nhóm, thì không có vấn đề gì. Truy vấn này sẽ là bất hợp pháp trong Microsoft SQL Server (và ANSI SQL), ngay cả khi nó không thể dẫn đến sự mơ hồ về mặt logic:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;

Ngoài ra, MySQL có một chế độ SQL để làm cho nó hoạt động theo tiêu chuẩn: ONLY_FULL_GROUP_BY

FWIW, SQLite cũng cho phép các mệnh đề GROUP BY không rõ ràng này, nhưng nó chọn giá trị từ cuối cùng hàng trong nhóm.

Ít nhất là trong phiên bản tôi đã thử nghiệm. Tùy tiện nghĩa là gì là MySQL hoặc SQLite có thể thay đổi việc triển khai của chúng trong tương lai và có một số hành vi khác nhau. Do đó, bạn không nên dựa vào hành vi của chúng như hiện tại trong những trường hợp mơ hồ như thế này. Tốt hơn hết là bạn nên viết lại các truy vấn của mình để có tính xác định và không mơ hồ. Đó là lý do tại sao MySQL 5.7 hiện bật ONLY_FULL_GROUP_BY theo mặc định.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nhập tệp kết xuất MySQL lớn (14 GB) vào cơ sở dữ liệu MySQL mới?

  2. Cách hoạt động của hàm MID () trong MySQL

  3. Kết nối Visual COBOL với MySQL

  4. Xuất cơ sở dữ liệu MySQL hoặc MariaDB

  5. 10 sự thật và mẹo thú vị hàng đầu về MySQL