sql >> Database >  >> RDS >> Mysql

Wat zijn de voordelen van de modus only_full_group_by?

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 .



  1. Mysqldump:maak kolomnamen voor invoegingen bij het maken van een back-up

  2. Entity Developer en ADO.Net Data Providers ondersteunen nu Entity Framework Core 5

  3. MySQL5.6 zit vast in het proces dat de service probeert te starten

  4. SQL OR-operator voor beginners