2012-09-28 52 views
5

這些腳本給我同樣的結果CROSS APPLY相比OUTER APPLY

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一樣嗎?

有沒有一個他們沒有返回相同結果的情況的例子?

回答

9

認爲INNER JOIN(用於CROSS)和LEFT JOIN(用於OUTER)使區分更易於理解。 CROSS只返回外部表中應用函數返回結果集的行。 OUTER返回外部表中的所有行。

+1

+1 APPLY只是一個連接能夠使用先前定義的列。 – usr

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) 

OUTER APPLY是CROSS APPLY什麼
OUTER JOIN是INNER JOIN