嗨,想知道是否有人可以对下面的错误有所了解。 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子句`
答案 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中,您也必须将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)
我也发生了同样的事情。只需按照以下说明进行操作即可:
config/database.php
'strict'=>true
属性并将其更改为'strict'=>false
。那我希望你能解决它。再见!