首頁 > 資料庫 > mysql教程 > 如何模仿 MySQL 5.6 版本中的 ANY_VALUE 函數?

如何模仿 MySQL 5.6 版本中的 ANY_VALUE 函數?

Mary-Kate Olsen
發布: 2024-11-29 22:12:11
原創
310 人瀏覽過

How to Mimic MySQL's ANY_VALUE Function in Version 5.6?

MySQL 5.6:ANY_VALUE 函數的替代方案

使用MySQL 版本5.7 和5.6 時,可能會遇到有關ANY_UE 函數的問題,VAL這僅在5.7 版本中可用。這可能會導致查詢執行期間出現混亂和錯誤。問題出現了:如何在 MySQL 5.6 中獲得類似的功能?

MySQL 5.6 沒有提供與 ANY_VALUE 直接等效的功能。但是,還有其他方法可以實現所需的結果。

停用 ONLY_FULL_GROUP_BY 模式

一個選擇是停用 ONLY_FULL_GROUP_BY SQL 模式。此模式強制 SELECT 語句中引用的所有非聚合資料列也必須出現在 GROUP BY 子句中。透過停用此模式,MySQL 將允許執行這樣的查詢而不會出現錯誤:

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;
登入後複製
要停用ONLY_FULL_GROUP_BY,請使用下列語法:

  SET @mode := @@SESSION.sql_mode;
  SET SESSION sql_mode = '';
  /* your query here */
  SET SESSION sql_mode = @mode;
登入後複製
但是,重要的是請注意,停用ONLY_FULL_GROUP_BY可能會導致某些情況下出現錯誤結果或意外行為

選擇「第一個」值

另一種方法是修改查詢以從圖像表中選擇特定值,例如第一個值。這可以使用 MIN() 函數和子查詢來實現:

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
登入後複製
此查詢將為每個國家/地區返回一行,圖像是表中的第一個圖像,按其 ID 排序。這種方法提供了可預測且一致的結果。

以上是如何模仿 MySQL 5.6 版本中的 ANY_VALUE 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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