sql >> Base de Datos >  >> RDS >> Mysql

¿Cuáles son los beneficios del modo only_full_group_by?

only_full_group_by =encendido le dice al motor MySQL:No aplicar GROUP BY cuando tenga dudas sobre qué resultados mostrar y arroje un error. Solo aplicarlo si Group By le dice específicamente qué hacer. es decir, cuando Group By es completo y perfecto!

only_full_group_by =desactivado le dice al motor MySQL:siempre aplique GROUP BY y si tienes dudas sobre qué resultados elegir, ¡elige uno al azar!

No tienes que apagarlo si usas GROUP BY correctamente!

Ejemplo:

Tabla:usuarios

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

Cuando usas GROUP BY en el name columna:

SELECT * FROM users GROUP BY name;

Hay dos resultados posibles:

  1      ali
  2      john     

O

  2      john     
  3      ali

¡MYSQL no sabe qué resultado elegir! Porque hay diferentes id s pero ambos tienen name=ali .

Solución 1:

solo seleccionando el name campo:

SELECT name FROM users GROUP BY name;

resultado:

  ali
  john     

Esta es una solución perfecta. eliminando columnas que hacen GROUP BY confundido. Esto significa que sabes lo que estás haciendo. Por lo general, no necesita
esas columnas, pero si las necesita, vaya a Solución3 !

Solución 2:

Desactivar only_full_group_by . MYSQL elegirá uno de los dos resultados posibles ALEATORIAMENTE !! (Está bien si realmente no te importa qué id elegirá, pero recuerda activarlo inmediatamente después de su consulta para evitar comportamientos inesperados en futuros groupBys)

Solución 3

Usa un Aggregate función como MIN() , MAX() para ayudar a MYSQL a decidir qué debe elegir.

Por ejemplo:

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

resultado:

  2      john     
  3      ali

Elegirá el ali fila que tiene el máximo id .