这对我来说太奇怪了:
delete from GearsDev.dbo.Products
from GearsDev.dbo.Products as C
inner join #Common as M
on M.item = C.ItemNumber
#Common
是一个临时表,但其余部分对我没用。
你怎么能有两个from
条款?
答案 0 :(得分:13)
从DELETE的文档中可以看出,它可能需要两个FROM
条款。
第一个FROM
:
FROM: 是一个可选关键字,可以在DELETE关键字和目标table_or_view_name或rowset_function_limited之间使用。
第二个FROM
:
FROM <table_source>
: 指定其他FROM子句。 DELETE的Transact-SQL扩展允许在第一个FROM子句中从表中指定数据并从中删除相应的行。可以使用此扩展指定连接,而不是WHERE子句中的子查询来标识要删除的行。
因此,SQL将从Products
表中删除与#common
连接时具有匹配项的记录。
这与以下查询等效(含义):
delete from [GearsDev].[dbo].[Products]
where ItemNumber in
(
select item from #common
)
答案 1 :(得分:2)
您可以通过多个表约束要删除的记录集。第二个from
只为您删除的表生成别名C
,将其与表#common
连接,并仅删除记录为talbe #common
的记录。 / p>
答案 2 :(得分:1)
从MSDN第二个允许您创建一个过滤器,第一个来自相应的行将被删除,并匹配。
在这种情况下删除所有[GearsDev]。[dbo]。[Products]其中ItemNumber在#Common中具有相同的行,且具有相同值的项目