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中文网其他相关文章!