MySQL 5.6 中是否有 ANY_VALUE 功能?
您在生产中使用 MySQL 5.6 和开发中使用 MySQL 5.7 时遇到了问题。具体来说,您使用的是 GROUP BY 子句,该子句在 5.6 中返回错误。在 5.7 中,您可以使用 ANY_VALUE 函数解决该问题,但 MySQL 5.6 不支持该函数。
您使用的查询是:
SELECT c.id, c.name, i.* FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
在 MySQL 5.6 中,您会收到错误,因为 GROUP 中提到了非聚合列BY 子句。一种解决方案是使用 ANY_VALUE 函数,该函数从表中选择随机行。
SELECT c.id, c.name, ANY_VALUE(i.url) url, ANY_VALUE(i.lat) lat, ANY_VALUE(i.lng) lng FROM countries c, images i WHERE i.country_id = c.id GROUP BY c.id;
但是,使用 ANY_VALUE 并不理想,因为它返回任意值。更好的解决方案是检索特定值,例如第一个值:
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
这将返回每个国家/地区的第一张图像,而不是随机图像。或者,您可以在 MySQL 5.6 中禁用 ONLY_FULL_GROUP_BY 模式以允许原始查询运行,但不建议这样做,因为它可能会导致不正确的结果。
以上是MySQL 5.6 是否提供与 ANY_VALUE 等效的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!