這只是看起來那麼奇怪了吧:SQL查詢如何有兩個子句?
delete from [GearsDev].[dbo].[Products]
from [GearsDev].[dbo].[Products] as C
inner join #common M
on M.item = C.ItemNumber
的#Common是一個臨時表,但它的其餘部分是沒有意義的我。你怎麼能有兩個從?請幫助noob out。
這只是看起來那麼奇怪了吧:SQL查詢如何有兩個子句?
delete from [GearsDev].[dbo].[Products]
from [GearsDev].[dbo].[Products] as C
inner join #common M
on M.item = C.ItemNumber
的#Common是一個臨時表,但它的其餘部分是沒有意義的我。你怎麼能有兩個從?請幫助noob out。
從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
)
可以約束集要通過多個表中刪除記錄。第二個from
只爲您從中刪除的表生成別名C
,並將其與表#common
中的表加入,並僅刪除具有記錄的記錄#common
。
從MSDN第二個從允許您創建一個篩選器,第一個中的相應行將被刪除匹配的位置。
在這種情況下刪除所有[GearsDev] [DBO]。[產品]且ItemNumber在#Common相應的行具有相同的值
好答案,並感謝您的鏈接的項目。 – broke