2012-09-28 12 views
5

これらのスクリプトは、CROSSは

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

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

私に同じ結果を与える適用OUTERに比べて適用されるのと同じCROSS APPLYOUTER APPLYていますか?

同じ結果が返されない状況の例がありますか?

答えて

9

区別をわかりやすくするために、INNER JOIN(CROSS)とLEFT JOIN(OUTER)を考えてください。 CROSSは、適用された関数が結果セットを戻す外部表から行のみを戻します。 OUTERは外部表からすべての行を戻します。

+1

1が適用さJOINのINNERにアプライ交差しているだけで、以前に定義された列を使用することができるというの参加です。 – usr

5

同じ結果が返されない状況があります。ちなみに、以前のテーブル/サブクエリと次のサブテーブルを関連付ける必要がある場合にのみ、APPLYを使用します。 OUTERが適用

 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をする