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中文網其他相關文章!