MySQL 中的CROSS/OUTER APPLY
MySQL 本身不支援CROSS APPLY 語法,這在嘗試執行某些操作時可能是一個挑戰。這個問題的中心是找到一個與以下 CROSS APPLY 查詢等效的 MySQL:
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.<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 )
如果像本例一樣,只需要目標表中的單個字段,則聯接with子查詢可以省略,子查詢可以直接放在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類似的功能在不影響查詢準確性或效率的情況下進行申請。
以上是如何複製 MySQL 中的 CROSS APPLY 功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!