CROSS APPLY与OUTER APPLY相比

why*_*heq 5 sql sql-server-2008-r2

这些脚本给了我相同的结果

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

SELECT * FROM
(select x = null) x
CROSS APPLY
(select x = 1) y
Run Code Online (Sandbox Code Playgroud)

CROSS APPLYOUTER APPLY一样吗?

是否有一个例子表明他们没有返回相同的结果?

Joe*_*lli 10

认为INNER JOIN(用于CROSS)和LEFT JOIN(用于OUTER)可以使区分更容易理解.CROSS仅返回外部表中应用函数返回结果集的行.OUTER返回外部表中的所有行.


Ric*_*iwi 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)
Run Code Online (Sandbox Code Playgroud)

OUTER APPLY是交叉应用
OUTER JOIN对INNER JOIN的内容