3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
ANY_VALUE可以使用MIN或MAX匯總函數(shù)代替。
另外,您可能會(huì)考慮不設(shè)置ONLY_FULL_GROUP_BYSQL模式,這是MySql 5.7的默認(rèn)設(shè)置,它負(fù)責(zé)您與MySql 5.6的區(qū)別。然后,您可以延遲查詢的更新,直到將所有環(huán)境遷移到MySql 5.7。
兩者中的哪一個(gè)是更好的選擇,值得商de,但從長遠(yuǎn)來看,適應(yīng)您的查詢會(huì)更好,這樣他們才能遵守ONLY_FULL_GROUP_BY規(guī)則。使用MIN或MAX肯定可以這樣做。

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
幾十年來,您可以編寫在標(biāo)準(zhǔn)SQL中無效但在MySQL中完全有效的查詢
在標(biāo)準(zhǔn)SQL中,包含GROUP BY子句的查詢不能引用選擇列表中未在GROUP BY子句中命名的未聚合列。例如,此查詢?cè)跇?biāo)準(zhǔn)SQL中是非法的,因?yàn)檫x擇列表中的未聚合名稱列未出現(xiàn)在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擴(kuò)展了SQL對(duì)GROUP BY的標(biāo)準(zhǔn)用法,以便選擇列表可以引用未在GROUP BY子句中命名的非聚合列。
這來自GROUP BY上的Mysql 5.6手冊(cè)頁。如果在5.7.6的同一頁面上查看,您會(huì)發(fā)現(xiàn)情況已經(jīng)改變。并發(fā)生了巨大變化!
該頁面還為您提供了解決方案。禁用ONLY_FULL_GROUP_BY這將使您舊的5.6查詢可以在5.7.6上運(yùn)行(從查詢中刪除ANY_VALUE,因?yàn)樗?.7.6中不可用,而是使用ONLY_FULL_GROUP_BY)。
添加回答
舉報(bào)