小编典典

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

sql

这对我来说看起来很奇怪:

delete from GearsDev.dbo.Products 
from GearsDev.dbo.Products as C
inner join #Common as M
    on M.item = C.ItemNumber

#Common 是一个临时表,但是其余的对我来说毫无意义。

你怎么能有两个from子句?


阅读 328

收藏
2021-04-07

共1个答案

小编典典

DELETE的文档中可以看出,它可以包含两个FROM子句。

第一个FROM

FROM:是可选关键字,可以在DELETE关键字和目标table_or_view_name或rowset_function_limited之间使用。

第二个FROM

FROM <table_source>:指定一个附加的FROM子句。Transact-
SQL的DELETE扩展允许在第一个FROM子句中从表中指定数据并删除表中的相应行。

可以使用此扩展(指定一个联接)代替WHERE子句中的子查询来标识要删除的行。

因此,当与联接时,SQL将从Products表中删除具有匹配项的记录#common

这等效于(在含义上)以下查询:

delete from [GearsDev].[dbo].[Products]
where ItemNumber in
(
  select item from #common
)
2021-04-07