2012-09-28 10 views
5

Diese Skripte geben Sie mir das gleiche ErgebnisCROSS gelten für OUTER Vergleich GILT

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 APPLY und OUTER APPLY gleich sind?

Gibt es ein Beispiel für eine Situation, in der sie nicht das gleiche Ergebnis liefern?

Antwort

9

Denken Sie INNER JOIN (für CROSS) und LEFT JOIN (für OUTER), um die Unterscheidung leichter zu verstehen. CROSS gibt nur Zeilen aus der äußeren Tabelle zurück, in denen die angewandte Funktion eine Ergebnismenge zurückgibt. OUTER gibt alle Zeilen aus der äußeren Tabelle zurück.

+1

+1 GILT ist nur Spalten in der Lage zu verbinden zuvor definiert zu verwenden. – usr

5

Hier ist eine Situation, in der sie nicht das gleiche Ergebnis zurückgeben werden. Übrigens verwenden Sie nur APPLY, wenn Sie vorherige Tabellen/Unterabfragen mit den nächsten in Beziehung setzen müssen.

 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 ist GILT CROSS was
OUTER JOIN ist INNER JOIN

Verwandte Themen