only_full_group_by =on nói với MySQL engine:Không áp dụng GROUP BY
khi bạn nghi ngờ về kết quả sẽ hiển thị và thông báo lỗi. Chỉ áp dụng nó nếu Group By
cụ thể cho bạn biết bạn phải làm gì. tức là khi Group By
là đầy đủ và hoàn hảo!
only_full_group_by =tắt nói với MySQL engine:luôn áp dụng GROUP BY
và nếu bạn nghi ngờ về kết quả cần chọn, chỉ cần chọn ngẫu nhiên một kết quả!
Bạn không cần phải tắt tính năng này nếu sử dụng GROUP BY
đúng cách!
Ví dụ:
Bảng:người dùng
id | name
----------------
1 ali
2 john
3 ali
Khi bạn sử dụng GROUP BY
trên name
cột:
SELECT * FROM users GROUP BY name;
Có hai kết quả có thể xảy ra:
1 ali
2 john
HOẶC
2 john
3 ali
MYSQL không biết chọn kết quả nào! Vì có id
khác nhau s nhưng cả hai đều có name=ali
.
Giải pháp 1:
chỉ chọn name
lĩnh vực:
SELECT name FROM users GROUP BY name;
kết quả:
ali
john
Đây là một giải pháp hoàn hảo. xóa các cột tạo nên GROUP BY
bối rối. Điều này có nghĩa là bạn biết mình đang làm gì. Thông thường, bạn không cần
các cột đó, nhưng nếu bạn cần, hãy chuyển đến Giải pháp3 !
Giải pháp 2:
Đang tắt only_full_group_by
. MYSQL sẽ chọn một trong hai kết quả có thể có NGẪU NHIÊN !! (Sẽ ổn nếu bạn không thực sự quan tâm id
gì nó sẽ chọn, nhưng hãy nhớ bật nó lên ngay sau truy vấn của bạn để ngăn chặn các hành vi không mong muốn trong các groupBys trong tương lai)
Giải pháp 3
Sử dụng Aggregate
hàm như MIN()
, MAX()
để giúp MYSQL quyết định những gì nó phải chọn.
Ví dụ:
SELECT MAX(id), name FROM users GROUP BY name;
kết quả:
2 john
3 ali
Nó sẽ chọn ali
hàng có id
tối đa .