首頁 > 資料庫 > mysql教程 > MySQL中相關子查詢如何取代CROSS APPLY?

MySQL中相關子查詢如何取代CROSS APPLY?

Susan Sarandon
發布: 2024-12-05 01:33:22
原創
722 人瀏覽過

How Can Correlated Subqueries Replace CROSS APPLY in MySQL?

MySQL 中的CROSS/OUTER APPLY

儘管是T-SQL 中廣泛使用的運算符,但MySQL 本身並不支援CROSS APPLY 語法。這對於需要在 MySQL 環境中利用 CROSS APPLY 功能的開發人員來說是一個挑戰。

理解相關子查詢

在 MySQL 中,一種近似 CROSS APPLY 功能的常見方法是使用相關子查詢。相關子查詢是引用外部查詢中的列的子查詢。透過在 SELECT 語句或聯結條件中嵌入相關子查詢,您可以獲得與 CROSS APPLY 類似的結果。

範例1:使用相關子查詢作為謂詞進行連結

考慮下列查詢嘗試使用CROSS APPLY 從ORD_HISTORY 擷取特定值table:

SELECT ORD.ID
    ,ORD.NAME
    ,ORD.DATE
    ,ORD_HIST.VALUE
FROM ORD
CROSS APPLY (
    SELECT TOP 1 ORD_HISTORY.VALUE
    FROM ORD_HISTORY
    WHERE ORD.ID = ORD_HISTORY.ID
        AND ORD.DATE <= ORD_HISTORY.DATE
    ORDER BY ORD_HISTORY.DATE DESC
    ) ORD_HIST
登入後複製

由於MySQL 缺乏CROSS APPLY支持,更合適的做法是使用帶有相關子查詢的連接作為謂詞:

SELECT
   ORD.ID
  ,ORD.NAME
  ,ORD.DATE
  ,ORD_HISTORY.VALUE
FROM
  ORD
INNER JOIN
  ORD_HISTORY
    ON  ORD_HISTORY.ID
        =
        (SELECT ORD_HISTORY.ID
           FROM ORD_HISTORY
          WHERE ORD.ID = ORD_HISTORY.ID
            AND ORD.DATE <= ORD_HISTORY.DATE
       ORDER BY ORD_HISTORY.DATE DESC
          LIMIT 1
        )
登入後複製

在此查詢中,相關子查詢用於從 ORD_HISTORY中取得適當的值並將其嵌入作為聯接

範例2:在SELECT語句中直接使用關聯子查詢

如果只需要目標表中的單一欄位,可以合併關聯子查詢直接進入SELECT 語句:

SELECT
   ORD.ID
  ,ORD.NAME
  ,ORD.DATE
  ,(SELECT ORD_HISTORY.VALUE
      FROM ORD_HISTORY
     WHERE ORD.ID = ORD_HISTORY.ID
       AND ORD.DATE <= ORD_HISTORY.DATE
  ORDER BY ORD_HISTORY.DATE DESC
     LIMIT 1
   )   AS VALUE
FROM
  ORD
登入後複製

透過利用相關子查詢,開發人員可以有效地近似CROSS APPLY MySQL 中的功能,使它們即使在沒有本機 CROSS APPLY 支援的情況下也能夠執行複雜的資料擷取操作。

以上是MySQL中相關子查詢如何取代CROSS APPLY?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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