2017-03-31 74 views
0

我對SQL編碼相當陌生,並且仍在學習一些錯綜複雜的內容。 我已經研究並找不到與我所嘗試的相關的示例(也許我錯過了正確的關鍵字)。使用SQL Server 2016中涉及的第三個表更新查詢

我在SQL Server 2016三個表(僱員表 - E1,導入表與員工數據 - ED1和部門表 - D1)......對於這個問題相關的結構是:

在E1 DB1包含列

U_SysID - Identity, 
UserID - VARCHAR, 
FirstName - VARCHAR, 
LastName - VARCHAR, 
DepartmentID - VARCHAR 

與DBO的模式DB2 ED1包含DB1列

UserID - VARCHAR, 
FirstName - VARCHAR, 
LastName - VARCHAR, 
DepartmentName - VARCHAR 

D1載列

DepartmentID - Identity and 
DepartmentName - VARCHAR 

代碼我想出了嘗試做到這一點是:

USE DB1 
GO 

UPDATE E1 
SET DepartmentID = (SELECT DepartmentID 
        FROM D1 
        WHERE E1.UserID IN (SELECT UserID 
             FROM DB2.dbo.ED1) 
         AND D1.DepartmentName IN (SELECT DepartmentName 
               FROM ED1) 
         AND E1.UserID = DB2.dbo.ED1.UserID) 

我的問題是最後一行。 「DB2.dbo.ED1.UserID」產生一個不可綁定消息的多部分標識符。沒有輸入錯誤,並且在上面的select語句中使用該數據庫引用沒有問題,但是如果我刪除最後一行,則會收到子查詢返回多個值的消息。

任何時間花在閱讀本文和提供建議,非常感謝。

如果我沒有正確地編寫這篇文章,我還要提前道歉。

+0

您應該使用連接,而不是所有的子查詢。並且要小心,因爲如你所寫,你可能會得到超過1個返回的值。 –

+0

謝謝你的評論。 –

回答

1

這將做你所需要的。但是,你也應該檢查是否缺少或拼錯DepartmentNames,缺少用戶等

USE DB1 
GO 

UPDATE E1 
SET DepartmentID = D1.DepartmentID 
FROM E1 
INNER JOIN DB2.dbo.ED1 ED1 
    ON E1.UserID = ED1.UserID 
INNER JOIN D1 
    ON ED1.DepartmentName = D1.DepartmentName 
+0

謝謝,我要試一試。 –

+0

超級棒。這很好。 –