在以下示例中,我将 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的替代方法吗?
答案 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 lateral
或ON
来代替USING
。
脚注:
(*)在版本12c之前,Oracle"不支持"启用跟踪事件时lateral
。见https://jonathanlewis.wordpress.com/2011/01/31/ansi-outer/