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 APPLY和OUTER APPLY一样吗?
是否有一个例子表明他们没有返回相同的结果?
Joe*_*lli 10
认为INNER JOIN(用于CROSS)和LEFT JOIN(用于OUTER)可以使区分更容易理解.CROSS仅返回外部表中应用函数返回结果集的行.OUTER返回外部表中的所有行.
这是他们不会返回相同结果的情况.顺便提一下,当您需要将先前的表/子查询与下一个表/子查询相关联时,您只使用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的内容