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

新手上路,请多包涵

我在切换到 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;

它正在运行 SQL 5.5.46,但是当我使用运行 5.7.10 的脱机版本时,我收到以下错误代码:

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

我一直在阅读很多解决人们问题的方法,但在这种情况下它们没有帮助。这是以前从未发生过的,所以我认为这要么非常明显,要么我在编码方面做得很好。无论如何,有人知道如何解决这个问题吗?

原文由 Frydaddy07 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 457
2 个回答

在 5.7 中,sqlmode 默认设置为:

  ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

要删除子句 ONLY_FULL_GROUP_BY,您可以这样做:

 SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

这假设您需要使用非聚合列创建 GROUP BY。

问候

原文由 White Feather 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 (Linux) 中查找 mysql client.cnf 文件

  • /etc/my.cnf.d/client.cnf

然后加

[mysqld]
sql_mode = ""

然后使用保存并重新启动 MySQL 服务

sudo systemctl restart mysqld

然后检查MySQL服务是否运行无误

sudo systemctl status mysqld

如果它运行没有错误,它将修复您的错误。

原文由 Nawodya Jayalath 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题