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