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