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は、OUTERJOINがINNERJOINに何であるかをクロスアプライすること
です

于 2012-09-28T21:36:57.493 に答える