2010-12-10 59 views
0

使用下面的表結構,我需要使用位置名稱作爲查找值,將行ID插入批准表中。我如何去做這件事?通過連接3個表來更新SQL

我開始使用下面的代碼,但它沒有太大的作用。在SQL連接上並不好,所以任何幫助都非常感謝。

UPDATE dbo.Approved 
SET dbo.Approved.Groupid=dbo.Lines.ID 
FROM dbo.Lines,dbo.Approved, dbo.Locations 
WHERE dbo.Approved.Location = dbo.Locations.Location_Name 

批准

ID (PK) | Incident    | Location  | GroupID 
-------------------------------------------------------- 
1  | Theft of luggage  |Oxford Circus | Null 
2  | Theft of bag   |Kings Cross | Null 

ID (PK) | Line_Name  | 
-------------------------- 
1  | Central  | 
2  | Northern  | 
3  | Circle   | 

位置

ID (PK) | Location_Name | LineID 
--------------------------------- 
1  | Oxford Circus |1 
2  | Kings Cross |2 
3  | Victoria  |3 
+0

問題:什麼是Where_Committed字段? – Spredzy 2010-12-10 14:55:29

+0

糟糕,那本不應該在那裏。感謝您的發現。 – MrBliz 2010-12-10 15:00:11

+0

您是否更改了查詢? – Spredzy 2010-12-10 15:01:56

回答

2

這是我會建議你:

UPDATE t1.Approved 
SET t1.Groupid = t2.ID 
FROM dbo.Approved t1 
INNER JOIN dbo.Locations t2 ON t1.Location = t2.Location_Name 

您不需要Lines表,因爲您要插入的內容,最後只是LineID而不是Line_Name。

希望它可以幫到,

+0

歡呼聲,非常感謝你 – MrBliz 2010-12-10 15:18:54

+0

你很好;)如果我可能你不需要在一個表中的位置和在另一個表中的Location_Name,這只是數據冗餘,如果這不是數據倉庫,你應該避免嘗試正常化更多;) – Spredzy 2010-12-10 15:24:36