首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误代码: 1055与sql_mode=only_full_group_by不兼容

错误代码: 1055与sql_mode=only_full_group_by不兼容
EN

Stack Overflow用户
提问于 2016-03-25 02:03:53
回答 8查看 86.4K关注 0票数 29

我在切换到拉曼SQL棒球数据库的离线版本时遇到了问题。我在使用嵌入到EDX课程中的终端。此命令在web终端上运行良好:

代码语言:javascript
复制
SELECT concat(m.nameFirst,concat(" ",m.nameLast)) as Player,
    p.IPOuts/3 as IP,
    p.W,p.L,p.H,p.BB,p.ER,p.SV,p.SO as K,
    p.IPOuts+p.W*5+p.SV+p.SO-p.BB-p.L-p.H as PTS,
    p.yearID as Year
FROM Pitching p
Inner Join Master m
    ON p.playerID=m.playerID
WHERE p.yearID=2014 AND p.IPOuts>=50
GROUP BY m.playerID
ORDER BY PTS DESC;

它运行的是SQL 5.5.46,但当我使用运行5.7.10的离线版本时,我得到以下错误代码:

错误代码: 1055。选择列表的表达式#1不在GROUP BY子句中,它包含非聚合列“”stats.m.nameFirst“”,该列在函数上不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容

我已经阅读了很多关于人们问题的解决方案,但它们在这种情况下并没有帮助。这在以前从来没有发生过,所以我认为这要么是非常明显的,要么是我在编码方面越来越好。不管怎样,有人知道怎么解决这个问题吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-03-25 02:35:40

在5.7中,sqlmode默认设置为:

代码语言:javascript
复制
 ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

要删除子句ONLY_FULL_GROUP_BY,可以执行以下操作:

代码语言:javascript
复制
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

假设您需要使用非聚合列进行分组。

问候

票数 67
EN

Stack Overflow用户

发布于 2016-12-18 17:53:20

上面接受的解决方案在我的5.7.9, for osx10.9 (x86_64)版本上不起作用。

然后,下面的方法起作用了-

代码语言:javascript
复制
set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
票数 36
EN

Stack Overflow用户

发布于 2018-04-29 01:42:54

对于其他用例:如果ONLY_FULL_GROUP_BY不是t的主键或唯一的非空列,则不一定要禁用名称。在这种情况下,无法推断函数依赖,并出现错误:

代码语言:javascript
复制
SELECT name, address, MAX(age) FROM t GROUP BY name;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP
BY clause and contains nonaggregated column 'mydb.t.address' which
is not functionally dependent on columns in GROUP BY clause; this
is incompatible with sql_mode=only_full_group_by

相反,您可以使用这个ANY_VALUE('my_column_name') my_column_name引用mysql文档,“在这种情况下,MySQL忽略每个名称组中地址值的不确定性,并接受查询。”使用ANY_VALUE()来引用地址:

代码语言:javascript
复制
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36207042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档