sql >> Database teknologi >  >> RDS >> Mysql

Hvad er fordelene ved only_full_group_by mode?

only_full_group_by =on fortæller MySQL-motoren:Anvend ikke GROUP BY når du er i tvivl om, hvilke resultater du skal vise og smider en fejl. Kun anvende det, hvis Group By fortæller dig specifikt, hvad du skal gøre. når Group By er fuld og perfekt!

only_full_group_by =off fortæller MySQL-motoren:Anvend altid GROUP BY og hvis du er i tvivl om, hvilke resultater du skal vælge, skal du blot vælge et tilfældigt!

Du behøver ikke at slå det fra, hvis du bruger GROUP BY ordentligt!

Eksempel:

Tabel:brugere

id | name ---------------- 1 ali 2 john 3 ali

Når du bruger GROUP BYname kolonne:

SELECT * FROM users GROUP BY name;
 

Der er to mulige resultater:

  1      ali
  2      john     
 

ELLER

  2      john
  3      ali
 

MYSQL ved ikke, hvilket resultat jeg skal vælge! Fordi der er forskellige id s, men begge har name=ali .

Løsning 1:

kun ved at vælge name felt:

SELECT name FROM users GROUP BY name;
 

resultat:

  ali
  john     
 

Dette er en perfekt løsning. fjernelse af kolonner, der gør GROUP BY forvirret. Det betyder, at du ved, hvad du laver. Normalt har du ikke brug for
disse kolonner, men hvis du har brug for dem, skal du gå til Løsning3 !

Løsning 2:

Deaktiverer only_full_group_by . MYSQL vil vælge et af de to mulige resultater tilfældigt !! (Det er ok, hvis du er ligeglad med hvilket id den vil vælge, men husk at slå den til umiddelbart efter din forespørgsel for at forhindre uventet adfærd i fremtidige groupBys)

Løsning 3

Brug en Aggregate funktion som MIN() , MAX() for at hjælpe MYSQL med at beslutte, hvad det skal vælge.

For eksempel:

SELECT MAX(id), name FROM users GROUP BY name;
 

resultat:

  2      john
  3      ali
 

Det vil vælge ali række, som har det maksimale id .



  1. Top 30 mest nyttige Concurrent Manager-forespørgsler

  2. Sådan skjuler du SQL-databaser, som en bruger ikke har adgang til

  3. Skal arrangere medarbejdernavne i henhold til deres by kolonnemæssigt

  4. Hvordan kan jeg slette en ikke-nul-begrænsning i Oracle, når jeg ikke kender navnet på begrænsningen?