2012-09-28 31 views
5

Những kịch bản cho tôi cùng một kết quảCHÉO áp dụng so với OUTER ÁP DỤNG

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

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

Are CROSS APPLYOUTER APPLY giống nhau không?

Có ví dụ về tình huống không trả về cùng một kết quả không?

Trả lời

9

Hãy suy nghĩ INNER JOIN (cho CROSS) và LEFT JOIN (cho OUTER) để làm cho sự khác biệt dễ hiểu hơn. CROSS chỉ trả về các hàng từ bảng bên ngoài, trong đó hàm được áp dụng trả về một tập kết quả. OUTER trả về tất cả các hàng từ bảng bên ngoài.

+1

1 ÁP DỤNG chỉ là một tham gia là có thể sử dụng các cột được định nghĩa trước. – usr

5

Đây là tình huống mà họ sẽ không trả lại kết quả tương tự. Ngẫu nhiên, bạn chỉ sử dụng ÁP DỤNG khi bạn cần phải tương quan trước các bảng/truy vấn phụ với các bảng tiếp theo.

 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 ÁP DỤNG là Cross ÁP DỤNG gì
OUTER JOIN là INNER JOIN