Fry*_*y07 18 mysql sql mysql-workbench mysql-error-1055
我一直在切换到Lahman SQL棒球数据库的离线版本时遇到问题.我正在使用嵌入EDX课程的终端.此命令在Web终端上运行正常:
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;
Run Code Online (Sandbox Code Playgroud)
哪个运行SQL 5.5.46,但是当我使用运行5.7.10的离线版本时,我收到以下错误代码:
错误代码:1055. SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列'stats.m.nameFirst',它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by不兼容
我一直在阅读很多解决人们问题的方法,但在这种情况下他们没有帮助.这种情况从未发生过,所以我认为这要么非常明显,要么就是我在编码方面做得很好.无论如何,任何人都知道如何解决这个问题?
Whi*_*her 48
在5.7中,sqlmode默认设置为:
ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)
要删除ONLY_FULL_GROUP_BY子句,您可以执行以下操作:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Run Code Online (Sandbox Code Playgroud)
这假设您需要使用非聚合列进行GROUP BY.
问候
Ani*_*nis 26
上面接受的解决方案在版本上对我不起作用5.7.9, for osx10.9 (x86_64).
然后以下工作 -
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';
Run Code Online (Sandbox Code Playgroud)
小智 9
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
** your query **
Run Code Online (Sandbox Code Playgroud)
这将解决您的问题。
对于其他用例:在这样的情况下,您不必禁用ONLY_FULL_GROUP_BY
它。根据mysql docs,“如果name不是t的主键或唯一的NOT NULL列,则此查询无效。在这种情况下,no可以推断出功能依赖性,并且会发生错误:”
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
Run Code Online (Sandbox Code Playgroud)
取而代之的是,您可以ANY_VALUE('my_column_name') my_column_name
在MySQL文档中使用“在这种情况下,MySQL忽略每个名称组中地址值的不确定性并接受查询”。使用ANY_VALUE()引用地址:
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51857 次 |
| 最近记录: |