with stackoverflow sqlstate sql_mode questions only_full_group_by only incompatible full example error disable code any_value mysql group-by mysql-error-1055

mysql - stackoverflow - sql error 1055 sqlstate 42000



La lista SELECT no está en la cláusula GROUP BY y contiene una columna no agregada... incompatible con sql_mode=only_full_group_by (10)

Para que la consulta sea legal en SQL92, la columna de nombre debe omitirse de la lista de selección o nombrarse en la cláusula GROUP BY.

SQL99 y versiones posteriores permiten dichos agregados no agregados por característica opcional T301 si dependen funcionalmente de las columnas GROUP BY: si existe una relación entre nombre y custid, la consulta es legal. Este sería el caso, por ejemplo, si fuera una clave principal de los clientes.

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. .

a través de dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

Puede resolverlo cambiando el modo sql con este comando:

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

y ... recuerda volver a conectar la base de datos !!!

Estoy usando MySQL 5.7.13 en mi PC con Windows con WAMP Server

Aquí mi problema es al ejecutar esta consulta

SELECT * FROM `tbl_customer_pod_uploads` WHERE `load_id` = ''78'' AND `status` = ''Active'' GROUP BY `proof_type`

Siempre recibo un error como este

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

¿Me puede decir la mejor solución ...

Necesito resultado como

+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+ | id | user_id | load_id | bill_id | latitude | langitude | proof_type | document_type | file_name | is_private | status | createdon | updatedon | +----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+ | 1 | 1 | 78 | 1 | 21.1212 | 21.5454 | 1 | 1 | id_Card.docx | 0 | Active | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 | +----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+


  1. Inicie sesión en phpMyAdmin
  2. Navegue a: Servidor: localhost: 3306 y no seleccione ninguna base de datos
  3. Haga clic en las variables del menú superior.
  4. Busque "modo sql" y edite el valor correspondiente a: NO_ENGINE_SUBSTITUTION

Eso es todo.

Hice esto en mi Ec2 y funcionó a las mil maravillas.


Abra su panel WAMP y abra el archivo de configuración MySQL. En él busque "sql_mode" si lo encuentra, configúrelo en "" else si no lo encuentra, agregue sql_mode = "" al archivo.

Reinicie el servidor MySQL y estará listo para comenzar ...

feliz codificación


Cuando el modo only_full_group_by de MySQL está activado, significa que se aplicarán estrictas reglas ANSI SQL cuando se use GROUP BY . Con respecto a su consulta, esto significa que si GROUP BY de la columna proof_type , solo puede seleccionar dos cosas:

  • la columna proof_type , 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 las preguntas de MySQL GROUP BY 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 le obligará a pensar en lo que realmente quiere hacer.

Nota: ANSI SQL amplía lo que se permite seleccionar en GROUP BY al incluir también columnas que dependen funcionalmente de la (s) columna (s) seleccionada (s). Un ejemplo de dependencia funcional sería agrupar por una columna de clave principal en una tabla. Dado que se garantiza que la clave primaria será única para cada registro, por lo tanto, 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).


En tu my.ini , escribe esto:

[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"

Depende de tu versión. O:

[mysqld] sql_mode = ""

o simplemente elimine esto: ONLY_FULL_GROUP_BY


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 me funciona. Usé esto porque en mi proyecto hay muchas consultas como esta, así que simplemente cambie este modo sql onli_full_group_by

Gracias... :-)


La respuesta de Dhanu K y Anil Gupta funcionó para mí, sin embargo, debe reiniciar mysql en la terminal para ver el resultado.


Por cómo se ve, creo que agrupar por múltiples columnas / campos no dañará su resultado. ¿Por qué no intentas agregar al grupo de esta manera?

GROUP BY `proof_type`, `id`

Esto se proof_type por proof_type primero y luego id . Espero que esto no altere los resultados. En algunos / la mayoría de los casos, agrupar por múltiples columnas da resultados incorrectos.


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'';


Use cualquier solución

(1) PHPMyAdmin

si está utilizando phpMyAdmin, cambie la configuración " sql_mode " como se menciona en la siguiente captura de pantalla.

Edite la variable "modo sql" y elimine el texto "ONLY_FULL_GROUP_BY" del valor

(2) Símbolo del sistema Ejecute el siguiente comando.

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

(3) No use SELECT *

Use la columna relevante en la consulta SELECT. relevante significa columnas, que vienen en cláusula "group by" o columna con la función de agregado (MAX, MIN, SUM, COUNT, etc.)

Nota IMPORTANTE

Los cambios realizados utilizando el punto (1) O el punto (2) no lo establecerán PERMANENTEMENTE, y se revertirán después de cada reinicio.

Por lo tanto, debe configurar esto en su archivo de configuración (por ejemplo, /etc/mysql/my.cnf en la sección [mysqld]), para que los cambios sigan vigentes después del reinicio de MySQL:

Archivo de configuración : /etc/mysql/my.cnf

Nombre de la variable : sql_mode O sql-mode