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 de la cláusula GROUP BY; esto es incompatible con sql_mode = only_full_group_by
¿Puedes decirme cuál es la mejor solución?
Necesito un 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 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
mysql
group-by
mysql-error-1055
Dhanu K
fuente
fuente
SELECT *
.tbl_customer_pod_uploads
WHEREload_id
= '78' ANDstatus
= 'Active' GROUP BYproof_type
only_full_group_by
modo SQL.tbl_customer_pod_uploads
WHEREload_id
= '78' ANDstatus
= 'Active' GROUP BYproof_type
Respuestas:
Esta
se resolverá simplemente cambiando el modo sql en MySQL con este comando,
Esto también funciona para mí. Usé esto, porque en mi proyecto hay muchas consultas como esta, así que acabo de cambiar este modo sql a only_full_group_by
Gracias... :-)
fuente
Cuando el
only_full_group_by
modo de MySQL está activado, significa que se aplicarán reglas estrictas de ANSI SQL al usarGROUP BY
. Con respecto a su consulta, esto significa que si perteneceGROUP BY
a laproof_type
columna, solo puede seleccionar dos cosas:proof_type
columna, oPor "agregados" de otras columnas, me refiero a usar una función de agregado como
MIN()
,MAX()
oAVG()
con otra columna. Entonces, en su caso, la siguiente consulta sería válida:La gran mayoría de MySQL
GROUP BY
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 le obligará a pensar en lo que realmente quiere hacer.Nota: ANSI SQL amplía lo que se permite seleccionar
GROUP BY
al incluir también columnas que dependen funcionalmente de la (s) columna (s) que se seleccionan. Un ejemplo de dependencia funcional sería agrupar por una columna de clave principal en una tabla. Dado que se garantiza que la clave principal es única para cada registro, 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 lo hacen AFAIK).fuente
GROUP BY
es casi siempre una mala idea. Me asusta que tantos usuarios sigan un consejo equivocado y lo utilicen.Utilice cualquier solución
(1) PHPMyAdmin
Si está utilizando phpMyAdmin, cambie la configuración de " 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 / SQL Ejecute el siguiente comando.
(3) ** No use SELECT ***
Utilice la columna relevante en la consulta SELECT. columnas de medios relevantes, que vienen en la cláusula "agrupar por" o en la columna con la función agregada (MAX, MIN, SUM, COUNT, etc.)
Nota IMPORTANTE
Los cambios realizados utilizando el punto (1) O el punto (2) no lo configurarán 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 la sección [mysqld]), para que los cambios sigan vigentes después de reiniciar MySQL:
Archivo de configuración : /etc/mysql/my.cnf
Nombre de la variable : sql_mode O sql-mode
fuente
El siguiente método resolvió mi problema:
En ubuntu
Tipo:
sudo vi /etc/mysql/my.cnf
escriba A para ingresar al modo de inserción
En la última línea, pegue el código de dos líneas a continuación:
Escriba esc para salir del modo de entrada
Escriba
sudo service mysql restart
para reiniciar MySQL.fuente
Puede deshabilitar sql_mode = only_full_group_by mediante algún comando, puede intentarlo mediante terminal o MySql IDE
fuente
En Ubuntu
Paso 1:
Paso 2: Vaya a la última línea y agregue lo siguiente
Paso 3: guardar
Paso 4: reinicie el servidor mysql.
fuente
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 !!!
fuente
vaya a phpmyadmin y abra la consola y ejecute esta solicitud
fuente
Busque "modo SQL" si está utilizando PhpMyAdmin y quite el valor:,
ONLY_FULL_GROUP_BY
simplemente lo hizo y está bien.fuente
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:
Esto se agrupará
proof_type
primero y luegoid
. Espero que esto no altere los resultados. En algunos / la mayoría de los casos, el grupo por varias columnas da resultados incorrectos.fuente
Ingrese abajo
Ctrl + O => Y = Ctrl + X
fuente
Hola, en lugar de tomar todas las columnas, solo tome lo que necesita usando
ANY_VALUE(column_name)
. Funciona perfectamente. Sólo revisa.P.ej:
fuente
Eso es todo.
Hice esto en mi Ec2 y funcionó a las mil maravillas.
fuente
Aquí hay una forma realmente rápida y fácil de configurarlo permanentemente
NB: la ejecución
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
es temporal y, al reiniciar el servidor, aún terminará con el error. Para solucionar este problema de forma permanente, haga lo siguientewget https://gist.githubusercontent.com/nfourtythree/90fb8ef5eeafdf478f522720314c60bd/raw/disable-strict-mode.sh
chmod +x disable-strict-mode.sh
./disable-strict-mode.sh
Y listo, se realizarán cambios en mysql y se reiniciará
fuente
Actualización para MySQL 8.0
No
sql-mode
lo tendrá,NO_AUTO_CREATE_USER
ya que se eliminó como se menciona aquí: cómo-establecer-modo-sql-en-mi-cnf-en-mysql-8Además, si alguien no tiene un
my.cnf
archivo, crea uno nuevo/etc/my.cnf
y luego agrega las líneas anteriores.fuente
En tu
my.ini
, escribe esto:depende de su versión. O:
o simplemente elimine esto:
ONLY_FULL_GROUP_BY
fuente
Abra su panel WAMP y abra el archivo de configuración de MySQL. En él, busque "sql_mode" si lo encuentra, configúrelo en ""; de lo contrario, si no lo encuentra, agregue sql_mode = "" al archivo.
Reinicie el servidor MySQL y estará listo ...
codificación feliz.
fuente