sqlstate sql_mode only_full_group_by not nonaggregated error disable desactivar column and mysql mysql-error-1055

mysql - not - sql_mode only_full_group_by mamp



# 1055-La expresión de la lista SELECT no está en la cláusula GROUP BY y contiene una columna no agregada, esto es incompatible con sql_mode=only_full_group_by (9)

mi consulta:

select libelle,credit_initial,disponible_v,sum(montant) as montant FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee and annee = year(current_timestamp) GROUP BY libelle order by libelle asc

  • Mysql 5.7.9 ejecuta la consulta sin ningún problema, pero mysql 5.7.12 muestra el error anterior ¿Podría ayudarme con eso?

Configuración de base y definición de 5.7.5 ONLY_FULL_GROUP_BY Debe usar toda la columna no agregada en su grupo por

select libelle,credit_initial,disponible_v,sum(montant) as montant FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee and annee = year(current_timestamp) GROUP BY libelle,credit_initial,disponible_v order by libelle asc


Debe agregar por cualquier cosa que NOT IN el group by cláusula.

Entonces, hay dos opciones ... Agregar Credit_Initial y Disponible_v al group by

O

MAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_v a MAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_v si sabe que los valores son constantes y no tienen otro impacto.


Debe especificar todas las columnas que no está utilizando para una función de agregación en su cláusula GROUP BY como esta:

select libelle,credit_initial,disponible_v,sum(montant) as montant FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee and annee = year(current_timestamp) GROUP BY libelle,credit_initial,disponible_v order by libelle asc

El modo full_group_by básicamente te hace escribir SQL más idiomático. Puede desactivar esta configuración si lo desea. Hay diferentes formas de hacer esto que se describen en la https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html . Aquí está la definición de MySQL de lo que dije anteriormente:

MySQL 5.7.5 y superior implementa la detección de dependencia funcional. Si el modo SQL ONLY_FULL_GROUP_BY está habilitado (que es el predeterminado), MySQL rechaza las consultas para las cuales la lista de selección, la condición HAVING o la lista ORDER BY hacen referencia a columnas no agregadas que no están nombradas en la cláusula GROUP BY ni dependen funcionalmente de ellas. . (Antes de 5.7.5, MySQL no detecta dependencia funcional y ONLY_FULL_GROUP_BY no está habilitado de forma predeterminada. Para obtener una descripción del comportamiento anterior a 5.7.5, consulte el Manual de referencia de MySQL 5.6).

Recibes el error porque estás en una versión <5.7.5


Esto funcionó para mí:

mysql -u root -p mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,''ONLY_FULL_GROUP_BY'',''''));

Es posible que necesite sudo para el primer paso:

sudo mysql -u root -p


Lo mismo ocurre con las versiones 8.0+ también. Por defecto en la versión 8.0+ está "habilitado" por defecto. Aquí está el enlace de referencia del documento oficial

En el caso de las versiones 5.6+, 5.7+, la propiedad "ONLY_FULL_GROUP_BY" está deshabilitada de manera predeterminada.

Para deshabilitarlo, siga los mismos pasos sugeridos por @Miloud BAKTETE


Puede deshabilitar sql_mode = only_full_group_by mediante algún comando, puede intentarlo por terminal o MySql IDE

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''; mysql> set session sql_mode=''STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'';

He intentado esto y trabajado para mí. Gracias :)


Solución 1: eliminar ONLY_FULL_GROUP_BY de la consola mysql

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

Puede leer más aquí

Solución 2: eliminar ONLY_FULL_GROUP_BY de phpmyadmin

Open phpmyadmin & select localhost Click on menu Variables & scroll down for sql mode Click on edit button to change the values & remove ONLY_FULL_GROUP_BY & click on save.


Tuve dificultades para lograr que esto funcione, lo probé y funciona en el servidor de lámpara mysql versión 5.12

Entonces, pasos para el éxito:

  1. sudo vim /etc/mysql/conf.d/mysql.cnf
  2. Desplácese hasta la parte inferior del archivo Copiar y pegar

    [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

al final del archivo

  1. guardar y salir del modo de entrada
  2. sudo service mysql restart para reiniciar MySQL.

¡Hecho!


solo vaya a la bandeja inferior de la ventana, haga clic en el icono de wamp, haga clic en mysql-> my.ini, luego hay una opción; sql-mode = "" descomente esto, haga que sea como sql-mode = "" y reinicie wamp funcionó para mí