2012-09-17 83 views
0

考虑下表:SQL Server 2008中合并

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 

我基本上是想找到用户名和CarId其他表中,如果他们没有找到他们仍然NULL,

我想是这样

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; 

在这种情况下,我得到一个不正确的语法。 我该如何解决它? 这种情况下使用MERGE的方法是什么? (合并超过2个表并使用WHERE子句)? 谢谢。

回答

2

您可以使用from子句中更新自己:

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

谢谢,我会检查出来。 – gigi

0

希望下面将解决你的问题

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