sql >> Databáze >  >> RDS >> Mysql

Jaké jsou výhody režimu only_full_group_by?

only_full_group_by =zapnuto říká enginu MySQL:Neaplikujte GROUP BY když máte pochybnosti o tom, jaké výsledky zobrazit, a vyvoláte chybu. Pouze použijte jej, pokud Group By konkrétně vám řekne, co máte dělat. tj. když Group By je plný a dokonalý!

only_full_group_by =vypnuto říká enginu MySQL:vždy použijte GROUP BY a pokud máte pochybnosti o tom, jaké výsledky vybrat, vyberte jeden náhodně!

Pokud používáte GROUP BY, nemusíte jej vypínat správně!

Příklad:

Tabulka:uživatelé

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

Když použijete GROUP BY na name sloupec:

SELECT * FROM users GROUP BY name;

Existují dva možné výsledky:

  1      ali
  2      john     

NEBO

  2      john     
  3      ali

MYSQL neví, jaký výsledek zvolit! Protože existují různé id s, ale oba mají name=ali .

Řešení 1:

pouze výběrem name pole:

SELECT name FROM users GROUP BY name;

výsledek:

  ali
  john     

To je perfektní řešení. odstranění sloupců, které tvoří GROUP BY zmatený. To znamená, že víte, co děláte. Obvykle
tyto sloupce nepotřebujete, ale pokud je potřebujete, přejděte na Solution3 !

Řešení 2:

Vypínání only_full_group_by . MYSQL vybere jeden ze dvou možných výsledků NÁHODNĚ !! (To je v pořádku, pokud vás opravdu nezajímá jaké id vybere, ale nezapomeňte jej zapnout bezprostředně po dotazu, aby se předešlo neočekávanému chování v budoucích groupBys)

Řešení 3

Použijte Aggregate funkce jako MIN() , MAX() pomoci MYSQL rozhodnout se, co si musí vybrat.

Například:

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

výsledek:

  2      john     
  3      ali

Vybere ali řádek, který má maximální id .



  1. Účinek nápovědy NOLOCK v příkazech SELECT

  2. Jak nainstalovat MariaDB 10 na Debian a Ubuntu

  3. Automatické zvýšení pro Oracle

  4. Jak odstranit záznam MySQL po určité době