2012-09-17 5 views
0

Vu les tableaux suivants:serveur SQL 2008 de fusion

Users 
---------------------- 
Id | 1 | 2 
Name| John| Jack 

Cars 
---------------------- 
Id | 14  | 26 
Name| Mercedes| BMW 

Import 
----------------------- 
Id   | 12 | 34 
UserName | John | Daniel 
UserId  | NULL | NULL 
CarName | BMW | Mercedes 
CarId  | NULL | NULL 
SomeOtherId| 45 | 45 

Je veux essentiellement trouver UserId et carid dans les autres tableaux, S'ils trouvent pas, ils restent NULL,

J'ai essayé quelque chose comme

UPDATE Import i 
SET UserId = (SELECT Id FROM Users WHERE Name=i.UserName), 
    CarId = (SELECT Id FROM Cars WHERE Name= i.CarName) 
WHERE SomeOtherId=45; 

Dans ce cas, j'obtiens une syntaxe incorrecte. Comment puis-je le réparer? Est-ce un moyen d'utiliser MERGE dans ce cas? (fusionner plus de 2 tables et utiliser une clause WHERE)? Merci.

Répondre

2

Vous pouvez utiliser from clause mise à jour elle-même:

UPDATE i 
    SET UserId = Users.Id, 
     CarId = Cars.Id 
    FROM Import i 
    LEFT JOIN Users 
    ON i.UserName = Users.Name 
    LEFT JOIN Cars 
    ON i.CarName = Cars.Name 
WHERE i.SomeOtherId=45; 
+0

Merci, je vais vérifier. – gigi

0

espère que le suivant résoudra votre problème

UPDATE I 
SET UserId = U.Id 
FROM IMPORT I 
INNER JOIN Users U 
    ON I.UserName = U.Name 
WHERE UserId is Null 


UPDATE I 
SET CarId = C.Id 
FROM IMPORT I 
INNER JOIN Cars C 
    ON I.CarName = C.Name 
WHERE CarId is Null