2011-11-04 11 views
9

Esto sólo se ve tan extraño para mí:¿Cómo puede una consulta SQL tener dos cláusulas?

delete from [GearsDev].[dbo].[Products] 
from [GearsDev].[dbo].[Products] as C 
inner join #common M 
    on M.item = C.ItemNumber 

El #Common es una tabla temporal, pero el resto de que no tiene sentido para mí. ¿Cómo puedes tener dos de ellos? Por favor ayuda a un novato a salir.

Respuesta

12

Como puede verse en la documentación de DELETE, puede tomar dos cláusulas FROM.

La primera FROM:

DE: es una palabra clave opcional que se puede utilizar la palabra clave entre ELIMINAR y la table_or_view_name objetivo, o rowset_function_limited.

El segundo FROM:

FROM <table_source>: especifica un adicional de cláusula. Esta extensión de Transact-SQL para DELETE permite especificar datos y eliminar las filas correspondientes de la tabla en la primera cláusula FROM.

Esta extensión, que especifica una unión, se puede utilizar en lugar de una subconsulta en la cláusula WHERE para identificar las filas que se eliminarán.

Así, el SQL eliminará los registros de la tabla Products que tienen un elemento coincidente cuando se une con #common.

Esto es equivalente (en sentido) a la siguiente consulta:

delete from [GearsDev].[dbo].[Products] 
where ItemNumber in 
(
    select item from #common 
) 
+0

buena respuesta y gracias por el enlace. – broke

2

puede restringir el conjunto de registros que desea eliminar por más de una tabla. El segundo from acaba de generar el alias C para la tabla que elimina, lo une con la tabla #common y elimina solo los registros que tienen un registro en talbe #common.

1

De MSDN El segundo de permite crear un filtro que las filas correspondientes en el primero desde se eliminan donde coinciden.

En este caso Eliminar todo [GearsDev]. [Dbo]. [Productos] donde ItemNumber tiene una fila correspondiente en #Common con el artículo del mismo valor

Cuestiones relacionadas