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

MySQL:error SQL:1140, estado SQL:42000

La siguiente consulta no es válida con ONLY_FULL_GROUP_BY activado. El primero no es válido porque el nombre en la lista de selección no se menciona en GROUP BY cláusula

mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)

sin columnas GROUP es ilegal si no hay una cláusula GROUP BY

Puede volver a escribir la consulta para que funcione bien como

mysql> SELECT name, MAX(age) FROM t GROUP BY name;

o

Desactive ONLY_FULL_GROUP_BY y el error debería desaparecer.

Los enlaces pueden ayudarte

  1. Puede buscar errores de MySQL aquí
  2. group-by-functions
  3. publicación similar en stackoverflow.com
  4. otro foro donde se discutió un problema similar
  5. server-sql-mode

ACTUALIZAR

Esta es la respuesta a tu comentario.

But i would like to know more about disabling the Group BY mode in mysql db.  

Modos SQL del servidor

  • El servidor MySQL puede operar en diferentes modos SQL y puede aplicar estos modos de manera diferente para diferentes clientes, dependiendo del valor de sql_mode variable del sistema. Esta capacidad permite que cada aplicación adapte el modo operativo del servidor a sus propios requisitos.

  • Para establecer el modo SQL al inicio del servidor, use --sql-mode="modes" opción en la línea de comando, o sql-mode="modes" en un archivo de opciones como my.cnf (Unix operating systems) o my.ini (Windows) . modos es una lista de diferentes modos separados por comas. Para borrar el modo SQL explícitamente, configúrelo en una cadena vacía usando --sql-mode="" en la línea de comando, o sql-mode="" en un archivo de opciones.

  • Para cambiar el modo SQL en tiempo de ejecución, use un

    SET [GLOBAL|SESSION] sql_mode='modes'
    declaración para establecer la variable de sistema sql_mode. Configurar la variable GLOBAL requiere el privilegio SUPER y afecta al funcionamiento de todos los clientes que se conecten a partir de ese momento. La configuración de la variable SESSION afecta solo al cliente actual. Cualquier cliente puede cambiar su propio valor de sesión sql_mode en cualquier momento.

  • Para determinar el valor sql_mode global o de sesión actual, use las siguientes declaraciones:

    SELECT @@GLOBAL.sql_mode;
    SELECT @@SESSION.sql_mode;

  • Puede consultar tabla sql_mode

I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.  

Esto sucede debido a la versión de MySQL. ¿Cuál es la versión de MySQL de su computadora local?

¿Cómo comprobar la versión de MySQL?

mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28    |
+-----------+
1 row in set (0.00 sec)    

Para probar sql_mode ONLY_FULL_GROUP_BY , creé la tabla patient con dos columnas id, name y registros insertados. Recuerde sql_mode ONLY_FULL_GROUP_BY no está configurado por defecto, debe configurarlo si lo desea.

1) Versión de MySQL 5.0.45-community-nt

SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

Falló, no tenía sentido establecer sql_mode en ONLY_FULL_GROUP_BY ya que no permitirá columnas no agregadas que no estén nombradas en la cláusula GROUP BY.

2) Versión de MySQL 5.1.40-comunidad

mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id)  | name   |
+----------+--------+
|       33 | aniket |
+----------+--------+
1 row in set (0.03 sec)  

Luego, después de configurar sql_mode ONLY_FULL_GROUP_BY

mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

3) Versión de MySQL 5.5.28

mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id)  | name   |
+----------+--------+
|       33 | aniket |
+----------+--------+
1 row in set (0.03 sec)  

Luego, después de configurar sql_mode ONLY_FULL_GROUP_BY

mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause  

Conclusión

Como puede ver, la consulta falló en la versión 5.0.45 y tuvo éxito en/después de 5.1.40 y 5.5.28 Antes de la versión de MySQL 5.1.10(no estoy seguro) consulta sin GROUP BY falla independientemente de sql_mode ONLY_FULL_GROUP_BY establecido o no.

Algunos errores interesantes y enlace de preguntas frecuentes de sql_mode

  1. ONLY_FULL_GROUP_BY el modo sql es demasiado restrictivo
  2. sql-mode:solo el grupo completo por modo no funciona
  3. Preguntas frecuentes de MySQL 5.0:Modo SQL del servidor