En MySQL podemos obtener el error con código 1055 en aquellas ocasiones que construimos una consulta de base datos cuando una expresión SQL con group by no devuelve las mismas columnas que en la expresión de agrupación que hemos construido.

Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column

Expresado de otra manera, este error se produce cuando se lanza una SQL con Group By donde las columnas de agrupación no coinciden con las que se quiere agrupar.

También le puede interesar

Guía rápida de administración de MySQL

Guía para montar un servidor web en una Raspberry Pi

Guía para crear un diagrama entidad relación de una base de datos existente MySQL

Descripción del error code 1055 de MySQL

Cómo comentaba al principio el error es el siguiente:

Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'BBDD.tabla.columna' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Este error se produce cuando estamos intentando lanzar una SQL donde se devuelve una columna que no es agrupada dentro de la claúsula Group By, mostrando la incompatibilidad en cuestión.

En mi caso, este error me sucedió con la versión de MySQL 8.0.15 y la solución fue sencilla.

Solución al error code 1055 only_full_group_by

Esta solución ha sido probada con la versión MySQL 8.0.15. En cualquier otra versión no puedo garantizar que funcione, aunque creo que puede ser una solución bastante genérica a partir de esta versión ya que en antiguas no me ha sucedido.

La solución consiste en modificar una variable de entorno de MySQL. Por lo que previamente realizaremos un backup de esta.

Desde consola de comandos, lanzar la siguiente SQL:

SELECT @@sql_mode

Resultado:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Este resultado lo guardamos por si nos hiciera falta restaurarlo en otro momento.

Ahora vamos a actualizar la variable de entorno de MySQL eliminando el valor 'ONLY_FULL_GROUP_BY' que es el que nos está generando el problema al lanzar nuestra SQL. Para ello ejecutamos el siguiente comando:

SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

Otra solución pero que a mi no me funcionó a priori pero que debería de funcionar, sería:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

De esta forma no tendríamos que hacer un backup previo del valor de la variable de entorno. Pero si no os funciona, como me ocurrió a mí, lo hacéis como expliqué antes.

También puede ocurrir que este cambio no sea permanente, y haya que hacerlo antes de lanzar nuestra SQL. Si queremos que sea permanente se podría hacer incluyendo el comando en el fichero de configuración de MySQL llamado my.cnf. Pero esa configuración se escapa de este tutorial y no la voy a tratar aquí.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies