2010-12-10 36 views
0

En utilisant la structure de tableau ci-dessous, j'ai besoin d'insérer l'ID de ligne dans la table approuvée, en utilisant le nom de l'emplacement comme valeur de référence. Comment vais-je faire cela? J'ai commencé en utilisant le code ci-dessous, mais ça ne fait pas grand-chose. Pas très bien sur SQL se joint donc toute aide est très appréciée.Mise à jour de SQL en joignant 3 tables

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 

approuvés

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

Lignes

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

Emplacements

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

Une question: Quel est le champ Where_Committed? – Spredzy

+0

Oops, ça n'aurait pas dû être là. Merci de l'avoir repéré. – MrBliz

+0

Avez-vous changé la requête? – Spredzy

Répondre

2

C'est ce que je vous suggère:

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

Vous n'avez pas besoin de la table Lignes parce que ce que vous voulez insérer, à la fin est juste le LineID pas le Line_Name.

Espérons que cela pourrait aider,

+0

Salutations, merci beaucoup – MrBliz

+0

Vous êtes welcom;) Si je ne devais pas besoin de Location dans une table et Location_Name dans l'autre, c'est juste de la redondance des données et si ce n'est pas un datawarehouse, vous devriez éviter cela normaliser plus;) – Spredzy