0

考虑下表:

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

我基本上想在其他表中找到 UserId 和 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 子句)?谢谢。

4

2 回答 2

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;
于 2012-09-17T12:51:22.740 回答
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
于 2012-09-17T12:58:11.617 回答