首頁 > 資料庫 > mysql教程 > 如何複製 MySQL 中的 CROSS/OUTER APPLY 功能?

如何複製 MySQL 中的 CROSS/OUTER APPLY 功能?

DDD
發布: 2024-12-07 13:07:16
原創
459 人瀏覽過

How to Replicate CROSS/OUTER APPLY Functionality in MySQL?

MySQL 中的 CROSS/OUTER APPLY

MySQL 缺乏對 CROSS APPLY語法的直接支持,但可以採用替代方法來實現類似的功能.

嵌套子查詢:

在MySQL 中,一種常見的替代方法是使用相關子查詢作為JOIN 語句中的謂詞。這可確保針對外部查詢中的每一行評估子查詢的結果。

範例:

給定查詢:

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
登入後複製

使用巢狀子查詢的等效查詢將為:

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

直接子查詢:

如果只需要目標表中的單一字段,可以直接進行關聯子查詢整合到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
登入後複製

以上是如何複製 MySQL 中的 CROSS/OUTER APPLY 功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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