不进行分组聚合:MySQL 5.6 的解决方案
在 MySQL 5.6 中,ANY_VALUE() 函数,允许聚合非分组列,不可用。这在将查询从 MySQL 5.7 迁移到 5.6 时带来了挑战。
MySQL 模式修改
一种解决方案是修改生产环境的 SQL 模式。通过将 ONLY_FULL_GROUP_BY 模式设置为空,它将暂时禁用聚合非分组列的限制。
SET SESSION sql_mode = ''; /* Your query here */ SET SESSION sql_mode = @mode;
替代聚合方法
但是,很重要请注意,所讨论的查询可能并不理想。它从每个国家/地区的“图像”表中返回随机行。
更可靠的方法是根据条件(例如“id”列)选择特定图像行。
SELECT c.id, c.name, i.* FROM countries c LEFT JOIN ( SELECT MIN(id) id, country_id FROM images GROUP BY country_id ) first ON c.id = first.country_id LEFT JOIN images i ON first.id = i.id
此查询将为每个国家/地区返回一行,并提供可预测的图像选择。它利用“id”列来选择每个国家/地区的“第一张”图像。
以上是如何在 MySQL 5.6 中聚合非分组列?的详细内容。更多信息请关注PHP中文网其他相关文章!