Grupo MySQL por causas ERROR 1055 problema

Grupo MySQL por causas ERROR 1055 problema

descripción incorrecta

ERROR 1055 (42000): La expresión # 1 de la lista SELECT no está en la cláusula GROUP BY y contiene la columna no agregada 'work_ad.api_community_pic.id' que no depende funcionalmente de las columnas de la cláusula GROUP BY; esto es incompatible con sql_mode = only_full_group_by

causas del problema:
ONLY_FULL_GROUP_BY的意思是:对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。
Solución:

Configuración de la base de datos de consultas:

select @@GLOBAL.sql_mode;
select @@SESSION.sql_mode;

STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Modificar la configuración de la base de datos

set @@sql_mode 
='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

Nota: Si la base de datos ya existe, debe utilizarla antes de modificar

configuración sql_mode

ONLY_FULL_GROUP_BY

Para las operaciones de agregación GROUP BY, si la columna en SELECT no aparece en GROUP BY, entonces este SQL es ilegal porque la columna no está en la cláusula GROUP BY. En resumen, las columnas que siguen a SELECT deben ser incluidas por las columnas que siguen a GROUP BY. Tales como:
seleccione a, b del grupo de tablas por a, b, c; (correcto)
seleccione a, b, c del grupo de tablas por a, b; (error)
Esta configuración hará que el entorno de la declaración GROUP BY sea muy estrecho, por lo que Generalmente no agregue esta configuración

NO_AUTO_VALUE_ON_ZERO

Este valor afecta la inserción de columnas de crecimiento propio. De forma predeterminada, insertar 0 o NULL significa que se genera el siguiente valor auto-creciente. (Si no me cree, puede intentarlo, el sql_mode predeterminado que estableció en la columna de clave primaria de incremento automático es 0, el campo se convertirá automáticamente en el último incremento automático, el efecto es el mismo que nulo), si el usuario desea insertar un valor de 0 (no cambiado), La columna aumenta automáticamente, entonces esta opción es útil.

STRICT_TRANS_TABLES

En este modo, si no se puede insertar un valor en una tabla de transacciones, la operación actual se interrumpe y no hay restricción en la tabla de no transacciones. (Tabla de transacciones predeterminada de InnoDB, tabla de no transacciones predeterminada de MyISAM; la tabla de transacciones MySQL admite el envío unificado o la reversión del procesamiento por lotes como una tarea completa, es decir, se ejecutan o no se ejecutan varias declaraciones contenidas en la transacción. Las tablas de transacciones no admiten este tipo de operación. Si una instrucción en el lote encuentra un error, la instrucción anterior al error se ejecuta correctamente y la siguiente instrucción no se ejecuta; la tabla de transacciones MySQL tiene bloqueos de tabla y bloqueos de fila, pero solo los bloqueos de tabla están disponibles para las tablas no transaccionales)

NO_ZERO_IN_DATE

En modo estricto, no se permiten días y meses cero

NO_ZERO_DATE

Establezca este valor, la base de datos mysql no permite la inserción de una fecha cero, e insertar una fecha cero arrojará un error en lugar de una advertencia.

ERROR_FOR_DIVISION_BY_ZERO

Durante INSERT o UPDATE, si los datos se dividen por cero, se genera un error en lugar de una advertencia. Si no se proporciona este modo, MySQL devuelve NULL cuando los datos se dividen por cero

NO_AUTO_CREATE_USER

Prohibir que GRANT cree usuarios con contraseñas vacías

NO_ENGINE_SUBSTITUTION

Si el motor de almacenamiento requerido está deshabilitado o no se compila, se genera un error. Cuando no se establece este valor, reemplácelo con el motor de almacenamiento predeterminado y genere una excepción

PIPES_AS_CONCAT

Trate "||" como un operador de concatenación de cadenas en lugar de un operador o, que es el mismo que la base de datos de Oracle y similar a la función de concatenación de cadenas Concat

ANSI_QUOTES

Cuando ANSI_QUOTES está habilitado, no se pueden usar comillas dobles para citar una cadena porque se interpreta como un identificador

Link de referencia

Supongo que te gusta

Origin blog.csdn.net/weixin_45609519/article/details/105827563
Recomendado
Clasificación