CROSS APPLY与OUTER APPLY的比较

5

这些脚本给我相同的结果

SELECT * FROM
(select x = null) x
OUTER APPLY
(select x = 1) y  

SELECT * FROM
(select x = null) x
CROSS APPLY
(select x = 1) y
< p >CROSS APPLY和OUTER APPLY是相同的吗?

是否有一个例子说明它们返回不同的结果的情况?

2个回答

10

使用INNER JOIN(用于CROSS)和LEFT JOIN(用于OUTER)来使区别更易于理解。CROSS仅返回外部表中应用函数返回结果集的行。OUTER返回外部表中的所有行。


1
+1 APPLY只是一个连接,可以使用先前定义的列。 - usr

6

这里有一种情况,它们不会返回相同的结果。顺便说一下,只有在需要将先前的表格/子查询与下一个表格/子查询相关联时才使用APPLY。

     SELECT x.x, y.x y
       FROM (select [x] = 1) x
OUTER APPLY (select [x] = 1 where x.x is null) y  

-- result
1, null

     SELECT x.x, y.x y
       FROM (select [x] = 1) x
CROSS APPLY (select [x] = 1 where x.x is null) y

-- result
(empty result set)

OUTER APPLY相当于CROSS APPLY的外部连接,就像OUTER JOIN相当于INNER JOIN。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接