3 回答
TA贡献1784条经验 获得超7个赞
ANY_VALUE可以使用MIN或MAX汇总函数代替。
另外,您可能会考虑不设置ONLY_FULL_GROUP_BYSQL模式,这是MySql 5.7的默认设置,它负责您与MySql 5.6的区别。然后,您可以延迟查询的更新,直到将所有环境迁移到MySql 5.7。
两者中的哪一个是更好的选择,值得商de,但从长远来看,适应您的查询会更好,这样他们才能遵守ONLY_FULL_GROUP_BY规则。使用MIN或MAX肯定可以这样做。
TA贡献1911条经验 获得超7个赞
几十年来,您可以编写在标准SQL中无效但在MySQL中完全有效的查询
在标准SQL中,包含GROUP BY子句的查询不能引用选择列表中未在GROUP BY子句中命名的未聚合列。例如,此查询在标准SQL中是非法的,因为选择列表中的未聚合名称列未出现在GROUP BY中:
从订单AS o,客户AS中选择o.custid,c.name,MAX(o.payment)MAX。o.custid = c.custid GROUP BY o.custid; 为了使查询合法,必须从选择列表中省略name列或在GROUP BY子句中命名。
MySQL扩展了SQL对GROUP BY的标准用法,以便选择列表可以引用未在GROUP BY子句中命名的非聚合列。
这来自GROUP BY上的Mysql 5.6手册页。如果在5.7.6的同一页面上查看,您会发现情况已经改变。并发生了巨大变化!
该页面还为您提供了解决方案。禁用ONLY_FULL_GROUP_BY这将使您旧的5.6查询可以在5.7.6上运行(从查询中删除ANY_VALUE,因为它在5.7.6中不可用,而是使用ONLY_FULL_GROUP_BY)。
添加回答
举报