only_full_group_by =op vertelt MySQL-engine:Pas GROUP BY
. niet toe als je twijfelt over welke resultaten je moet laten zien en een fout geeft. Alleen pas het toe als Group By
specifiek vertelt u wat u moet doen. d.w.z. wanneer de Group By
is vol en perfect!
only_full_group_by =uit vertelt MySQL-engine:pas altijd GROUP BY
toe en als je twijfelt over welke resultaten je moet kiezen, kies er dan willekeurig een uit!
Je hoeft het niet uit te zetten als je GROUP BY
. gebruikt correct!
Voorbeeld:
Tabel:gebruikers
id | name
----------------
1 ali
2 john
3 ali
Wanneer u GROUP BY
. gebruikt op de name
kolom:
SELECT * FROM users GROUP BY name;
Er zijn twee mogelijke resultaten:
1 ali
2 john
OF
2 john
3 ali
MYSQL weet niet welk resultaat te kiezen! Omdat er verschillende id
. zijn s maar beide hebben name=ali
.
Oplossing1:
alleen de name
selecteren veld:
SELECT name FROM users GROUP BY name;
resultaat:
ali
john
Dit is een perfecte oplossing. kolommen verwijderen die GROUP BY
. maken verward. Dit betekent dat u weet wat u doet. Meestal heeft u
die kolommen niet nodig, maar als u ze nodig heeft, gaat u naar Oplossing3 !
Oplossing2:
only_full_group_by
uitschakelen . MYSQL kiest een van de twee mogelijke resultaten WILLEKEURIG !! (Het is oké als het je niet echt kan schelen wat id
het zal kiezen, maar vergeet niet om het aan te zetten onmiddellijk na uw vraag om onverwacht gedrag in toekomstige groupBys te voorkomen)
Oplossing3
Gebruik een Aggregate
functie zoals MIN()
, MAX()
om MYSQL te helpen beslissen wat het moet kiezen.
Bijvoorbeeld:
SELECT MAX(id), name FROM users GROUP BY name;
resultaat:
2 john
3 ali
Het zal de ali
. kiezen rij met de maximale id
.