2012-09-28 12 views
5

Estos scripts me dan el mismo resultadoCROSS APPLY en comparación con exterior aplica

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

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

son CROSS APPLY y OUTER APPLY la misma?

¿Hay algún ejemplo de una situación en la que no devuelvan el mismo resultado?

Respuesta

9

Think INNER JOIN (para CROSS) y LEFT JOIN (para OUTER) para hacer la distinción más fácil de entender. CROSS devuelve solo filas de la tabla externa donde la función aplicada devuelve un conjunto de resultados. OUTER devuelve todas las filas de la tabla externa.

+1

1 Apply es simplemente una combinación de poder utilizar columnas definidas previamente. – usr

5

Aquí hay una situación en la que no devolverán el mismo resultado. Por cierto, solo utiliza APLICAR cuando necesita correlacionar tablas/subconsultas anteriores con las siguientes.

 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) 

EXTERIOR aplicar es el de cruzar aplicar lo
OUTER JOIN es INNER JOIN