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:
-
sudo vim /etc/mysql/conf.d/mysql.cnf
-
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
- guardar y salir del modo de entrada
-
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í