Truy vấn sau không hợp lệ với ONLY_FULL_GROUP_BY
đã được kích hoạt. Đầu tiên không hợp lệ vì tên trong danh sách chọn không có tên trong GROUP BY
mệnh đề
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
không có cột GROUP là bất hợp pháp nếu không có mệnh đề GROUP BY
Bạn có thể viết lại truy vấn để hoạt động tốt như
mysql> SELECT name, MAX(age) FROM t GROUP BY name;
hoặc
Tắt ONLY_FULL_GROUP_BY và lỗi sẽ biến mất.
Liên kết có thể giúp bạn
- Bạn có thể tìm kiếm lỗi MySQL tại đây
- group-by-functions
- bài đăng tương tự trên stackoverflow.com
- một diễn đàn khác đã thảo luận vấn đề tương tự
- server-sql-mode
CẬP NHẬT
Đây là câu trả lời cho bình luận của bạn.
But i would like to know more about disabling the Group BY mode in mysql db.
-
Máy chủ MySQL có thể hoạt động ở các chế độ SQL khác nhau và có thể áp dụng các chế độ này khác nhau cho các máy khách khác nhau, tùy thuộc vào giá trị của
sql_mode
biến hệ thống. Khả năng này cho phép mỗi ứng dụng điều chỉnh chế độ hoạt động của máy chủ theo yêu cầu riêng của nó. -
Để đặt chế độ SQL khi khởi động máy chủ, hãy sử dụng
--sql-mode="modes"
trên dòng lệnh hoặcsql-mode="modes"
trong một tệp tùy chọn, chẳng hạn nhưmy.cnf (Unix operating systems)
hoặcmy.ini (Windows)
. chế độ là danh sách các chế độ khác nhau được phân tách bằng dấu phẩy. Để xóa chế độ SQL một cách rõ ràng, hãy đặt nó thành một chuỗi trống bằng cách sử dụng--sql-mode=""
trên dòng lệnh hoặcsql-mode=""
trong một tệp tùy chọn. -
Để thay đổi chế độ SQL trong thời gian chạy, hãy sử dụng
SET [GLOBAL|SESSION] sql_mode='modes'
Câu lệnh
để đặt biến hệ thống sql_mode. Đặt biến GLOBAL yêu cầu đặc quyền SUPER và ảnh hưởng đến hoạt động của tất cả các máy khách kết nối từ thời điểm đó trở đi. Đặt biến SESSION chỉ ảnh hưởng đến ứng dụng khách hiện tại. Bất kỳ máy khách nào cũng có thể thay đổi giá trị sql_mode phiên của chính nó bất kỳ lúc nào. -
Để xác định giá trị sql_mode phiên hoặc toàn cục hiện tại, hãy sử dụng các câu lệnh sau:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
Bạn có thể tham khảo bảng sql_mode
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
Điều này xảy ra do phiên bản MySQL. Phiên bản MySQL của máy tính cục bộ của bạn là gì?
Làm thế nào để kiểm tra phiên bản MySQL?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
Để kiểm tra sql_mode ONLY_FULL_GROUP_BY
, Tôi đã tạo bảng patient
với hai cột id, name
và các bản ghi đã chèn. Hãy nhớ sql_mode ONLY_FULL_GROUP_BY
không phải là đặt mặc định, bạn cần phải đặt nếu muốn.
1) Phiên bản MySQL 5.0.45-community-nt
SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Không thành công, không có ích gì khi đặt sql_mode thành ONLY_FULL_GROUP_BY
vì nó sẽ không cho phép các cột không được tổng hợp không có tên trong mệnh đề GROUP BY.
2) Phiên bản MySQL 5.1.40-community
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Sau đó, sau khi thiết lập sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
3) Phiên bản MySQL 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
Sau đó, sau khi thiết lập sql_mode ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Kết luận
Như bạn có thể thấy truy vấn không thành công trên phiên bản 5.0.45 và thành công trên / sau 5.1.40 và 5.5.28 Trước phiên bản MySQL 5.1.10 (không chắc chắn)
truy vấn không có GROUP BY
không thành công bất kể sql_mode ONLY_FULL_GROUP_BY
đặt hay không.
Một số lỗi thú vị và liên kết câu hỏi thường gặp về sql_mode
- ONLY_FULL_GROUP_BY chế độ sql quá hạn chế
- sql-mode:chỉ nhóm đầy đủ theo chế độ không hoạt động
- Câu hỏi thường gặp về MySQL 5.0:Chế độ Máy chủ SQL