update studio management inner from delete sql sql-server sql-server-2008-r2 delete-row

studio - sql delete row



¿Por qué funciona esta declaración de eliminación? (3)

Posible duplicado:
¿Cómo puede una consulta SQL tener dos cláusulas?

delete from machine_placement_group from (machine_group g left join config_chg_req r on g.machine_group_id = r.machine_group_id) join machine_placement_group mg on g.machine_group_id = mg.machine_group_id

No entiendo las dos de las declaraciones.


Creo que también podría escribirse como

delete machine_placement_group from machine_group g left join config_chg_req r on g.machine_group_id = r.machine_group_id join machine_placement_group mg on g.machine_group_id = mg.machine_group_id

y funciona como una declaración válida como

Declare @Test Table (id int) insert into @Test values(1) delete dbo.Employee from @test g join dbo.Employee e on g.id=e.ID

donde se elimina cualquier fila de FROM prueba ajustar la condición de unión como

delete dbo.Employee from @test g


El primero es opcional, el segundo no.

Por ejemplo, puedes escribir

delete from table1 where id = 10

o

delete table1 where id = 10

Pero si se está uniendo a otras tablas ya que esta consulta es que necesita ese segundo FROM.

Mi estilo preferido para cosas como esta es usar el alias, así que escribiría.

delete g --select * from machine_group g left join config_chg_req r on g.machine_group_id = r.machine_group_id join machine_placement_group mg on g.machine_group_id = mg.machine_group_id

Observe cómo inserto una selección en la declaración, esto le permite ver qué registros se eliminarán antes de ejecutar el informe ejecutando solo desde Seleccionar hasta el final de la consulta


Para citar la documentación para el segundo FROM:

FROM table_source

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

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

Para obtener más información, vea FROM (Transact-SQL).

Básicamente, hace lo que dice en la lata. Usted especifica un conjunto de resultados adicional a partir del cual se determinan los datos que se eliminarán en la tabla original.