MySQL 5.6 是否提供與 ANY_VALUE 等效的函數?

DDD
發布: 2024-11-27 04:14:11
原創
899 人瀏覽過

Does MySQL 5.6 Offer an Equivalent to the ANY_VALUE Function?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板