2016-02-26 57 views
0

我有一個Location表中的SQL Server:SQL更新加入另一個表

LocationId | LocationName | Address 
    ======================================== 
     15   AA   111 AAA 
     17   CC   999 CCC 

而且我有一個WorksiteWorksiteMark = Null

WorksiteId | WorksiteName | Address | LocationId | WorksiteMark 
    ====================================================================== 
     1   AA   111 AAA   15   Null 
     2   P   23 P   15   Null 
     3   F   78 F   15   Null 
     4   H   16 H   17   Null 
     5   CC   999 CCC   17   Null 
     6   W   78 W   17   Null 

最後我需要更新WorksiteMark = WorksiteId參考Location表,我將刪除Location

WorksiteId | WorksiteName | Address | WorksiteMark 
    ======================================================== 
     1   AA   111 AAA   1 
     2   P   23 P    1 
     3   F   78 F    1 
     4   H   16 H    5 
     5   CC   999 CCC   5 
     6   W   78 W    5 

你能幫我創建一個腳本來更新WorksiteMark = WorksiteId引用Location表嗎?

感謝

+3

爲什麼'1'?爲什麼'5'? –

+1

你能解釋一下工地標誌更新的邏輯嗎? –

+0

工地名稱AA和CC參考'位置表' –

回答

0

你需要一個雙JOIN與您的更新,類似;

UPDATE W 
SET W.WorksiteMark = W2.WorksiteId 
FROM Worksite AS W 
INNER JOIN Location AS L 
     ON L.LocationId = W.LocationId 
INNER JOIN Worksite AS W2 
     ON W2.WorksiteName = L.LocationName 
0

希望這適用於你。

Update W 
SET W.WorksiteMark = L1.WorksiteId 
FROM #Worksite AS W 
INNER JOIN (Select L.LocationId,W2.WorksiteId FROM #Location L INNER JOIN 
      #Worksite W2 ON L.LocationName = W2.WorkSiteName) AS L1 
    ON W.LocationId = l1.LocationId 
0
UPDATE [dbo].[Worksite] 
SET WorksiteMark = (SELECT WorksiteId FROM [dbo].[Worksite] B WHERE B.WorksiteNAME = [dbo].[Location].LocationName) 
from [dbo].[Worksite] 
inner join [dbo].[Location] on [dbo].[Location].[LocationId] = [dbo].[Worksite].LocationId