这些脚本给我相同的结果
SELECT * FROM
(select x = null) x
OUTER APPLY
(select x = 1) y
SELECT * FROM
(select x = null) x
CROSS APPLY
(select x = 1) y
CROSS APPLY
和OUTER APPLY
是否相同?
是否有一个他们没有返回相同结果的情况的例子?
答案 0 :(得分:10)
考虑INNER JOIN(用于CROSS)和LEFT JOIN(用于OUTER)以使区分更容易理解。 CROSS仅返回外部表中应用函数返回结果集的行。 OUTER返回外部表中的所有行。
答案 1 :(得分:5)
这是他们不会返回相同结果的情况。顺便提一下,当您需要将先前的表/子查询与下一个表/子查询关联时,您只使用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 JOIN是INNER JOIN