我試圖將sql server更新語句轉換爲delete語句,但創建delete語句時出現了有關別名的錯誤。我原來的更新連接兩個查詢,比較兩列的值,並更新哪裏是真的。我的刪除將類似,但將刪除上述列比較中的任一個爲假的任何行。這裏是我的更新語句:將更新語句轉換爲帶有別名的刪除語句
UPDATE drdTable
SET DeratingPartNumberID = new.DeratingPartNumberID
FROM [ReliabilityData].[dbo].[DeratingRefDes] drdTable, ((SELECT drd.[DeratingPartNumberID], [DeratingPartNumber].[Parameter], [DeratingPartNumber].[Units], drd.[DeratingRefDesID]
FROM [ReliabilityData].[dbo].[DeratingRefDes] drd
INNER JOIN [ReliabilityData].[dbo].[ReferenceDesignator]
ON [ReferenceDesignator].[ReferenceDesignatorID] = drd.[ReferenceDesignatorID]
INNER JOIN [ReliabilityData].[dbo].[DeratingPartNumber]
ON [DeratingPartNumber].[DeratingPartNumberID] = drd.[DeratingPartNumberID]
INNER JOIN [ReliabilityData].[dbo].[PartNumber]
ON [PartNumber].[PartNumberID] = [ReferenceDesignator].[PartNumberID]
INNER JOIN [ReliabilityData].[dbo].[BoardRevision]
ON [BoardRevision].[BoardRevisionID] = [ReferenceDesignator].[BoardRevisionID]
WHERE [PartNumber] = '2000465-203' AND [ReferenceDesignator].[BoardRevisionID] = 335 AND [ReferenceDesignator] IN ('C1','C2','C3','C4')) AS old
JOIN (SELECT [DeratingPartNumberID], [Parameter], [Units]
FROM [ReliabilityData].[dbo].[DeratingPartNumber]
WHERE [PartNumberID] = 82) AS new ON old.[Parameter] = new.[Parameter] AND old.[Units] = new.[Units])
WHERE drdTable.DeratingRefDesId = old.DeratingRefDesIDenter code here
這裏就是我有我的DELETE語句:
DELETE
FROM drdTable
FROM [ReliabilityData].[dbo].[DeratingRefDes] AS drdTable
WHERE DeratingPartNumberID IN (
(
SELECT drd.[DeratingPartNumberID],
[DeratingPartNumber].[Parameter],
[DeratingPartNumber].[Units],
drd.[DeratingRefDesID]
FROM [ReliabilityData].[dbo].[DeratingRefDes] drd
INNER JOIN [ReliabilityData].[dbo].[ReferenceDesignator]
ON [ReferenceDesignator].[ReferenceDesignatorID] = drd.[ReferenceDesignatorID]
INNER JOIN [ReliabilityData].[dbo].[DeratingPartNumber]
ON [DeratingPartNumber].[DeratingPartNumberID] = drd.[DeratingPartNumberID]
INNER JOIN [ReliabilityData].[dbo].[PartNumber]
ON [PartNumber].[PartNumberID] = [ReferenceDesignator].[PartNumberID]
INNER JOIN [ReliabilityData].[dbo].[BoardRevision]
ON [BoardRevision].[BoardRevisionID] = [ReferenceDesignator].[BoardRevisionID]
WHERE [PartNumber] = '2000465-203'
AND [ReferenceDesignator].[BoardRevisionID] = 335
AND [ReferenceDesignator] IN ('C1','C2','C3','C4')
) AS old
JOIN (
SELECT [DeratingPartNumberID],
[Parameter],
[Units]
FROM [ReliabilityData].[dbo].[DeratingPartNumber]
WHERE [PartNumberID] = 82
) AS new
ON old.[Parameter] <> new.[Parameter]
or old.[Units] <> new.[Units]
)
WHERE drdTable.DeratingRefDesId = old.DeratingRefDesID
我得到錯誤信息抱怨我在選擇語句中使用別名。
Msg 156, Level 15, State 1, Line 13
Incorrect syntax near the keyword 'AS'.
Msg 156, Level 15, State 1, Line 16
Incorrect syntax near the keyword 'AS'.
注意,它指的是走樣的選擇查詢的別名(即「老」和「新」的引用。我如何能重寫我的查詢有什麼建議?
的可能的複製[如何刪除使用INNER JOIN與SQL Server?](http://stackoverflow.com/questions/16481379/how-to-delete-using-inner-join-with-sql-server) – Ralph
我剛剛編輯了OP並做了一些「DELETE」查詢的縮進。像這樣,應該很容易看到第二個'FROM'和第二個'WHERE'的問題。只要刪除第一個'FROM'(如下所示)並用'AND'替換最後一個'WHERE'。那麼它應該工作。順便說一句:正確的格式化在SQL中總是一個很好的方法來識別可能的障礙/錯誤。 – Ralph
該條目不包括如何在刪除語句中對選擇查詢進行別名。 –