only_full_group_by =on säger till MySQL-motorn:Använd inte GROUP BY
när du är osäker på vilka resultat du ska visa och kasta ett fel. Endast tillämpa den om Group By
berättar specifikt vad du ska göra. d.v.s. när Group By
är full och perfekt!
only_full_group_by =off säger till MySQL-motorn:använd alltid GROUP BY
och om du tvivlar på vilka resultat du ska välja, välj bara ett slumpmässigt!
Du behöver inte stänga av den om du använder GROUP BY
ordentligt!
Exempel:
Tabell:användare
id | name
----------------
1 ali
2 john
3 ali
När du använder GROUP BY
på name
kolumn:
SELECT * FROM users GROUP BY name;
Det finns två möjliga resultat:
1 ali
2 john
ELLER
2 john
3 ali
MYSQL vet inte vilket resultat man ska välja! Eftersom det finns olika id
s men båda har name=ali
.
Lösning 1:
bara välja name
fält:
SELECT name FROM users GROUP BY name;
resultat:
ali
john
Detta är en perfekt lösning. tar bort kolumner som gör GROUP BY
förvirrad. Det betyder att du vet vad du gör. Vanligtvis behöver du inte
de här kolumnerna, men om du behöver dem, gå till Lösning3 !
Lösning 2:
Stänger av only_full_group_by
. MYSQL väljer ett av de två möjliga resultaten Slumpmässigt !! (Det är ok om du inte bryr dig om vilket id
det kommer att välja, men kom ihåg att aktivera det omedelbart efter din fråga för att förhindra oväntade beteenden i framtida groupBys)
Lösning3
Använd ett Aggregate
fungerar som MIN()
, MAX()
för att hjälpa MYSQL att bestämma vad den måste välja.
Till exempel:
SELECT MAX(id), name FROM users GROUP BY name;
resultat:
2 john
3 ali
Den kommer att välja ali
rad som har det maximala id
.