MySQL#1140 - 混合GROUP列

时间:2009-08-07 11:07:01

标签: sql mysql group-by mysql-error-1140

嗨,想知道是否有人可以对下面的错误有所了解。 sql在本地工作正常,但我远程得到以下错误。

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 - 将GROUP列(MIN(),MAX(),COUNT(),...)混合为no   GROUP列是非法的,如果有的话   没有GROUP BY子句`

7 个答案:

答案 0 :(得分:13)

您的服务器可能已启用ONLY_FULL_GROUP_BY。您可以将其关闭,也可以将每个选定的字段添加到组中。

答案 1 :(得分:10)

使用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上工作但不能在不改变其他dbs的情况下移植的SO问题。显然,在您的情况下,您仍然需要定义至少一个。

答案 2 :(得分:4)

在Laravel Framework中,设置'strict' => false,在config文件夹中的数据库文件中将修复此问题。

答案 3 :(得分:2)

当您在sql中使用诸如sum(),min(),max()之类的聚合函数时,必须使用分组依据

但是在最新的sql中,您也必须将select中的所有列也作为一个分组使用。

为此,您在config-> database中使用的laravel项目中

'strict'=>否,

并通过运行php artisan config:cache清除配置缓存。

我想我会为您提供更多帮助。

答案 4 :(得分: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

答案 5 :(得分:0)

我在旧版本的MySQL 5.0中遇到了同样的问题。 在较新的5.5版本中它可以工作!

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

答案 6 :(得分:0)

我也发生了同样的事情。只需按照以下说明进行操作即可:

  1. 在laravel中,转到config/database.php
  2. 搜索'strict'=>true属性并将其更改为'strict'=>false
  3. php artisan优化

那我希望你能解决它。再见!