2010-12-10 6 views
0

Mit der folgenden Tabellenstruktur muss ich die Leitungs-ID in die genehmigte Tabelle einfügen, wobei der Standortname als Suchwert verwendet wird. Wie gehe ich dabei vor?Aktualisieren von SQL durch Verbinden von 3 Tabellen

Ich begann mit dem unten genannten Code, aber es tut nicht viel. Nicht so toll bei SQL Joins, daher wird jede Hilfe sehr geschätzt.

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 

Approved

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

Linien

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

Standorte

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

Eine Frage: Was ist das Feld Where_Committed? – Spredzy

+0

Ups, das hätte nicht dort sein sollen. Danke, dass du es gesehen hast. – MrBliz

+0

Haben Sie die Abfrage geändert? – Spredzy

Antwort

2

Dies ist, was ich würde Ihnen vorschlagen:

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

Sie benötigen die Tabelle Lines nicht, da das, was Sie einfügen möchten, am Ende nur die LineID ist, nicht die Line_Name.

Ich hoffe, es könnte helfen,

+0

Prost, vielen Dank – MrBliz

+0

Sie sind willkommen;) Wenn ich Sie möglicherweise nicht brauchen Ort in der einen Tabelle und Location_Name in der anderen, das ist nur Datenredundanz und wenn dies kein Datawarehouse ist, sollten Sie dies versuchen zu vermeiden Normalisieren mehr;) – Spredzy