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

CROSS APPLYOUTER APPLY一样吗 ?

有没有他们不返回相同结果的情况的例子?

4

2 回答 2

10

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

于 2012-09-28T21:31:28.367 回答
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

于 2012-09-28T21:36:57.493 回答