【问题标题】:MySQL #1140 - Mixing of GROUP columnsMySQL #1140 - GROUP 列的混合
【发布时间】:2010-11-17 16:01:10
【问题描述】:

您好,想知道是否有人可以阐明以下错误。 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(),...) GROUP 列是非法的,如果有 没有 GROUP BY 子句`

【问题讨论】:

  • 当您不执行 GROUP BY 时,您希望 "COUNT(node.nid)" 返回什么?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    当你在 sql 中使用 sum(),min(),max() 等聚合函数时,你必须使用 group by

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

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

    '严格' => 假,

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

    我认为这对你会更有帮助。

    【讨论】:

      【解决方案3】:

      在 Laravel 框架中,在 config 文件夹的数据库文件中设置 'strict' => false 将解决此问题。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          您的服务器可能打开了ONLY_FULL_GROUP_BY。您可以将其关闭或将您选择的每个字段添加到分组依据。

          【讨论】:

            【解决方案6】:

            将其剥离为基础:

               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
            

            【讨论】:

              【解决方案7】:

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

              【讨论】:

              • 你能用另一个例子解释一下吗
              猜你喜欢
              • 2019-02-11
              • 2018-04-13
              • 1970-01-01
              • 2018-09-25
              • 2020-07-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多