2009-08-07 29 views
9

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.MySQL # 1140 - Mezcla de columnas GROUP

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 dicho:

# 1140 - Mezcla de columnas GROUP (MIN(), MAX(), COUNT(), ...) sin columnas grupo es ilegal si no hay ningún GROUP BY clause`

+0

¿Qué esperas que "COUNT (node.nid)" devuelva cuando no estás haciendo un GROUP BY? –

Respuesta

9

El motivo por el que una sola columna usa un aggregate function funciona mientras que la versión con columnas que no usan funciones de agregado no es porque necesita especificar una cláusula GROUP BY. Esto es lo que su consulta debe buscar parecerse a:

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 

me cambiaron a cabo sus alias de tabla para los más cortos - más fácil de leer. Aquí está la carne de su emisión:

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

alteré el ejemplo de usar una columna falsa con el fin de poner de relieve cómo necesita el GROUP BY por definir. Cualquier columna que haga referencia sin ajustar en una función agregada debe mencionar en el GROUP BY. Digo debería porque MySQL is the only db I'm aware of that supports a GROUP BY where you can selectively omit columns - hay 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 menos uno.

+0

¿Puedes explicarlo con otro ejemplo –

0

despojados de vuelta 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 
12

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

0

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` 
0

En laravel marco, el establecimiento de 'strict' => false, en la base de datos de archivo en la carpeta de configuración va a arreglar esto.