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
我不明白,這兩個從報表。
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
我不明白,這兩個從報表。
我想這也可以寫成
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
擬合加盟條件 像
一個有效的聲明,其中任何行從@Test刪除delete dbo.Employee
from @test g
我想我現在明白了。它將刪除machine_placement_group中的每一行,其中machine_group_id中的machine_group中有匹配的行,machine_group_id中的config_chg_req中有一行。如果相應的行在表b和c中退出,則刪除表a中的一行。我怎麼辦? – user1904985
要報價the documentation for t他第二 FROM:
FROM table_source
指定一個額外的FROM子句。 此DELETE的Transact-SQL擴展允許 從第一個FROM子句的表中指定
<table_source>
的數據和刪除表中相應的行的 。可以使用指定聯接的擴展來代替WHERE子句 中的子查詢來標識要刪除的行。
欲瞭解更多信息,請參閱FROM (Transact-SQL).
所以基本上它做什麼,它在錫說。您可以指定一個附加結果集,從中確定原始表中要刪除的數據。
第一個是可選的,第二個不是。
例如,你可以寫
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
你注意我如何嵌入選擇在聲明中,這可以讓你看到你運行剛剛從選擇查詢
是什麼RDBMS結束運行報告之前的記錄將被刪除你在用嗎? – Taryn
對我來說看起來像SQL Server語法。 – Yuck
@Yuck我從來沒有見過SQL Server語法,其中有兩個從子句中刪除 – Taryn