2009-08-07 57 views
9

嗨,想知道是否有人可以對下面的錯誤提供一些信息。 sql在本地工作正常,但我遠程獲得了下面的錯誤。MySQL#1140 - 混合GROUP列

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表示:

#1140 - 不帶 組列(MIN(),MAX(),COUNT(),...)的混合組列是非法的,如果有 沒有GROUP BY clause`

+0

當你不做GROUP BY時,你期待什麼「COUNT(node.nid)」? – 2009-08-07 11:17:23

回答

9

使用aggregate function的單列工作,而不使用聚合函數的列的版本的原因不是因爲您需要指定GROUP BY子句。這裏是您的查詢看起來應該類似於:

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 

我改變了你的表別名爲較短的 - 更容易閱讀。這是你的問題的肉:

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

我改變了例如使用假列,以突出GROUP BY需要如何定義。您引用的任何列沒有包裝在聚合函數中應在GROUP BY中提及。我說應該,因爲MySQL is the only db I'm aware of that supports a GROUP BY where you can selectively omit columns - 有很多關於爲什麼查詢可以在MySQL上工作的SO問題,但不能在不改變其他dbs的情況下移植它。顯然在你的情況下,你仍然需要定義至少一個。

+0

你能解釋另一個例子 – 2012-06-20 13:31:17

0

剝離其迴歸本源:

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

您的服務器可能已打開ONLY_FULL_GROUP_BY。您可以關閉它,也可以將每個選定的字段添加到組中。

0

我在舊版本的MySQL 5.0中遇到同樣的問題。 在較新的5.5版本,它的工作原理!

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

在Laravel框架,在config文件夾設置'strict' => false,數據庫文件將解決這個問題。