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.