MySQL # 1140 – Mezcla de columnas GROUP

Hola, me pregunto si alguien podría arrojar algo de luz sobre el siguiente error. El sql funciona bien localmente pero obtengo el siguiente error de forma remota.

Consulta SQL:

SELECT COUNT(node.nid), node.nid AS nid, node_data_field_update_date.field_update_date_value AS node_data_field_update_date_field_update_date_value FROM node node LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid WHERE node.type IN ('update') ORDER BY node_data_field_update_date_field_update_date_value DESC 

MySQL dijo:

# 1140 – Mezcla de columnas GROUP (MIN (), MAX (), COUNT (), …) sin columnas GROUP es ilegal si no hay una cláusula GROUP BY

La razón por la que una sola columna que usa una function agregada funciona mientras que la versión con columnas que no usan funciones agregadas no es porque necesita especificar una cláusula GROUP BY . Aquí se asemeja a su consulta:

  SELECT COUNT(n.nid), n.nid, ctu.field_update_date_value FROM NODE n LEFT JOIN CONTENT_TYPE_UPDATE ctu ON ctu.vid = n.vid WHERE n.type IN ('update') GROUP BY n.nid, ctu.field_update_date_value ORDER BY field_update_date_value DESC 

Cambié los alias de tu tabla por otros más cortos, más fáciles de leer. Aquí está la carne de tu problema:

  SELECT n.nid, COUNT(n.fake_example_column), ctu.field_update_date_value ... GROUP BY n.nid, ctu.field_update_date_value 

Modifiqué el ejemplo para usar una columna falsa para resaltar cómo se debe definir GROUP BY. Cualquier columna que haga reference sin ajustar en una function agregada debe mencionarse en GROUP BY . Digo debería porque MySQL es el único DB que conozco y que admite un GROUP BY en el que puede omitir columnas de forma selectiva . Existen numerosas preguntas SO sobre por qué las consultas funcionan en MySQL pero no se pueden portar sin cambiar a otros dbs. Aparentemente en su caso, aún necesita definir al less uno.

Su server probablemente tiene ONLY_FULL_GROUP_BY encendido. Puede desactivarlo o agregar cada uno de los campos seleccionados al grupo por.

lo quitó a lo básico:

  SELECT COUNT( node.nid ) FROM node node LEFT JOIN content_type_update node_data_field_update_date ON node.vid = node_data_field_update_date.vid WHERE node.type IN ('update') ORDER BY node_data_field_update_date.field_update_date_value DESC 

Tengo el mismo problema en la versión anterior de MySQL 5.0. ¡En la versión 5.5 más nueva funciona!

 SELECT COUNT(*), id FROM `cities` AS `c` 

En Laravel Framework, establecer 'strict' => false , en el file de la database en la carpeta config corregirá esto.