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
我不明白这两个陈述。
答案 0 :(得分:1)
引用{em>第二个 FROM:
的the documentationFROM table_source
指定其他FROM子句。 DELETE的Transact-SQL扩展允许 从
<table_source>
指定数据并删除 第一个FROM子句中表的相应行。可以使用此扩展指定连接,而不是WHERE子句中的子查询 识别要删除的行。
有关详细信息,请参阅FROM (Transact-SQL).
所以基本上它就像它在锡上说的那样。您可以指定另一个结果集,从中确定要在原始表中删除的数据。
答案 1 :(得分:1)
第一个是可选的,第二个不是。
例如你可以写
delete from table1 where id = 10
或
delete table1 where id = 10
但是,如果您要加入其他表,因为此查询需要第二个FROM。
我喜欢这种方式的首选方式是使用别名,所以我会写。
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
您注意到我如何在语句中嵌入一个选择,这样您就可以通过从Select运行到查询结尾来查看在运行报表之前将删除哪些记录
答案 2 :(得分:0)
我认为它也可以写成
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
并作为有效的声明,如
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
删除任何行FROM @test以适合连接条件 像
delete dbo.Employee
from @test g