MySQL 出现 La lista SELECT no está en la cláusula GROUP BY.

[grifo]

Error

El error de ejecución de SQL es el siguiente:

SELECT student.s_no,student.s_name,SUM(result.mark) FROM student,result WHERE student.s_no=result.s_no GROUP BY student.s_no
> 1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db_ketest.student.s_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
> 时间: 0.081s

la razón

MySQL 5.7.5 y superior tienen función de detección de dependencia. Si el modo SQL ONLY_FULL_GROUP_BY está habilitado (habilitado de forma predeterminada), MySQL rechazará listas de selección, TENIENDO condiciones o consultas de lista ORDER BY que hacen referencia a columnas no agregadas que no están nombradas en la cláusula GROUP BY, ni son funcionalmente dependientes de ellas. (Antes de 5.7.5, MySQL no detectaba dependencias funcionales y ONLY_FULL_GROUP_BY no estaba habilitado de forma predeterminada).

Solución

Método 1:
utilice la línea de comandos o el cliente de base de datos para ejecutar la
declaración SQL 1.SQL, seleccione la consulta @@ global.sql_mode

mysql> select @@global.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                                         |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.06 sec)

2. Elimina ONLY_FULL_GROUP_BY y restablece el valor.

mysql> set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

Método dos
vi modificar el archivo de configuración de MySQL my.cnf

[mysqld] 
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Guarde el archivo de configuración y reinicie el servicio MySQL: service mysql restart
== End ==

Supongo que te gusta

Origin blog.51cto.com/13771903/2595067
Recomendado
Clasificación