Si encuentras algún fallo con tu código o trabajo, recuerda probar siempre en un entorno de testing antes añadir el código al trabajo final.
Solución:
Esta
La expresión #1 de la lista SELECT no está en la cláusula GROUP BY y contiene la columna no agregada ‘returntr_prod.tbl_customer_pod_uploads.id’ que no depende funcionalmente de las columnas en la cláusula GROUP BY; esto es incompatible con sql_mode=only_full_group_by
se resolverá simplemente cambiando el modo sql en MySQL con este comando,
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Esto también funciona para mí. Utilicé esto porque en mi proyecto hay muchas consultas como esta, así que cambié este modo sql a only_full_group_by
Gracias… 🙂
Cuando MySQL only_full_group_by
está activado, significa que se aplicarán reglas estrictas de ANSI SQL al usar GROUP BY
. Con respecto a su consulta, esto significa que si Ud. GROUP BY
de El proof_type
columna, solo puede seleccionar dos cosas:
- los
proof_type
columna, o - agregados de cualquier otra columna
Por “agregados” de otras columnas, me refiero a usar una función agregada como MIN()
, MAX()
o AVG()
con otra columna. Entonces, en su caso, la siguiente consulta sería válida:
SELECT proof_type,
MAX(id) AS max_id,
MAX(some_col),
MIN(some_other_col)
FROM tbl_customer_pod_uploads
WHERE load_id = '78' AND
status = 'Active'
GROUP BY proof_type
La gran mayoría de MySQL GROUP BY
las preguntas que veo en SO tienen el modo estricto desactivado, por lo que la consulta se está ejecutando, pero con resultados incorrectos. En su caso, la consulta no se ejecutará en absoluto, lo que lo obligará a pensar en lo que realmente quiere hacer.
Nota: ANSI SQL amplía lo que se permite seleccionar en GROUP BY
incluyendo también columnas que son funcionalmente dependiente en la(s) columna(s) seleccionada(s). Un ejemplo de dependencia funcional sería agrupar por un primario key columna en una tabla. Desde la primaria key se garantiza que es único para cada registro, por lo que también se determinaría el valor de cualquier otra columna. MySQL es una de las bases de datos que permite esto (SQL Server y Oracle no AFAIK).
Use cualquier solución (de las siguientes 3)
(1) PHPMyAdmin
si está utilizando phpMyAdmin, cambie el “modo_sql” configuración como se menciona en la siguiente captura de pantalla.
Edite la variable “modo sql” y elimine el texto “ONLY_FULL_GROUP_BY” del valor
O
(2) Símbolo del sistema/SQL
Ejecute el siguiente comando.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
O
(3) No utilice SELECCIONAR *
Use la columna relevante en la consulta SELECT. columnas de medios relevantes, que vienen en la cláusula “agrupar por” o columna con la función agregada (MAX, MIN, SUM, COUNT, etc.)
Nota IMPORTANTE
Los cambios realizados mediante el punto (1) O el punto (2) no lo configuran PERMANENTEMENTE, y se revertirá después de cada reinicio.
Por lo tanto, debe establecer esto en su archivo de configuración (por ejemplo, /etc/mysql/my.cnf en el [mysqld] sección), para que los cambios permanezcan en vigor después de reiniciar MySQL:
Archivo de configuración: /etc/mysql/my.cnf
Nombre de la variable : modo_sql O modo sql
Quitar palabra ONLY_FULL_GROUP_BY del valor y guarde el archivo.
Nota : Si no ha encontrado la variable “sql_mode” en el archivo de configuración, inserte debajo de 2 líneas al final del archivo
[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
Si piensas que ha sido útil nuestro post, agradeceríamos que lo compartas con más programadores y nos ayudes a difundir este contenido.