SQL查询如何有两个from子句?

bro*_*oke 10 sql t-sql sql-server sql-server-2008

这对我来说太奇怪了:

delete from GearsDev.dbo.Products 
from GearsDev.dbo.Products as C
inner join #Common as M
    on M.item = C.ItemNumber
Run Code Online (Sandbox Code Playgroud)

#Common 是一个临时表,但其余部分对我没有意义.

你怎么能有两个from条款?

Ode*_*ded 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
)
Run Code Online (Sandbox Code Playgroud)