[MySQL]MySQL5.7版本后GROUP BY问题

[MySQL]MySQL5.7版本后GROUP BY问题

💡 原文中文,约6100字,阅读约需15分钟。
📝

内容提要

最近在做一个开源项目,遇到了group by查询的问题。在本地测试时没有问题,但在服务器上出现了错误。错误信息是SELECT语句中的列必须包含在GROUP BY中。解决方案有两种:修改global.sql_mode或通过修改配置文件。文章还提供了一个栗子来演示解决方法。文章最后提到,如果使用了with_entities指定查询列,查询结果将不再是对象,而是嵌套元组的列表。

🎯

关键要点

  • 在开源项目中遇到group by查询问题,服务器上出现错误。
  • 错误信息提示SELECT语句中的列必须包含在GROUP BY中。
  • 解决方案有两种:修改global.sql_mode或修改配置文件。
  • 第一种解决方案是通过SET语句修改global.sql_mode。
  • 第二种解决方案是修改MySQL配置文件,但可能导致服务无法启动。
  • SQL-92及更早版本要求SELECT、HAVING、ORDER BY中的字段必须在GROUP BY中。
  • 可以使用ANY_VALUE()函数包裹不在GROUP BY中的列以使查询合法。
  • 提供了一个Flask应用的示例,展示如何使用ANY_VALUE()进行查询。
  • 使用with_entities指定查询列时,结果将是嵌套元组的列表,而不是对象。
  • 代码示例中包含了对MySQL5.7以下版本的兼容处理。
🏷️

标签

➡️

继续阅读