在Oracle中有OUTER APPLY的替代方案吗?

时间:2015-07-07 20:45:27

标签: sql-server oracle outer-apply

在以下示例中,我将 tbA.ID 传递给 tbC 查询。在这种情况下,我使用了SqlServer的OUTER APPLY运算符。

SELECT 
  ...
FROM (SELECT ID FROM TableA ...) tbA
OUTER APPLY (SELECT ... FROM TableB tbB WHERE tbA.ID = tbB.ID) tbC
...

在Oracle中,我们没有OUTER APPLY运算符。那么,如何在不修改查询结构的情况下,将左侧查询中的值(tbA.ID)传递给连接的右侧查询(tbC)?

Oracle中有OUTER APPLY的替代方法吗?

2 个答案:

答案 0 :(得分:1)

根据评论进行编辑:

在Oracle 12中支持OUTER APPLY(可能作为SQL标准的一部分)。由于您的SQL是由实体框架生成的,所以您需要做的就是连接到Oracle并查看生成的查询输出的外观。我觉得你的问题是基于恐惧,"它如何在Oracle中发挥作用?"。运行代码并查看。

除此之外,Oracle内联查询就像表一样工作。你的问题是," 有替代品吗??" - 是的,见下文:

SELECT 
  ...
FROM 
    (SELECT ID FROM TableA ...) tbA left join
    (SELECT ID FROM TableB ...) tbB On tbA.ID = tbB.ID
 ...

答案 1 :(得分:1)

SQL Server outer apply类似于SQL标准lateral。自12c(*)以来,Oracle支持lateral

如果您想省略outer apply / left join lateral子句,则可以使用标准SQL中的cross join lateralON来代替USING

脚注: (*)在版本12c之前,Oracle"不支持"启用跟踪事件时lateral。见https://jonathanlewis.wordpress.com/2011/01/31/ansi-outer/