考虑以下表格:

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子句)? 谢谢。

#1楼 票数: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;

#2楼 票数: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

  ask by gigi translate from so

未解决问题?本站智能推荐:

2回复

在sql-server 2008中联接两个表

我有两个表: 表A: 表B: 结果应为: 任何想法? 谢谢
2回复

SQL中有关CASCADE的错误-Server 2008

我昨天发布了这个问题,但没有得到答案。 我在这里附上我的问题样本。 我要创建此数据库: 我得到一个错误: 我知道,如果我将'Students_FK1'更改为ON CASCADE NO ACTION,它将起作用,但这不是我的目标。 我希望如果'Person'的id更新,它也会
2回复

从SQL-Server 2005升级到SQL-Server 2008时如何更新冲突解决程序

我们最近从SQL Server 2005升级到SQL Server 2008(R2,SP1)。 此升级包括一些发布,其中所有表都使用基于“以后获胜”原则的默认冲突解决程序发布。 它的智能名称是'Microsoft SQL Server DATETIME(Later Wins)Conflict
1回复

是否有可能在sql-server 2008中将一个视图拆分成很多视图?

背景是我正在尝试编写一个视图,该视图接受一个表,该表的每一行都是一个ID,并将该ID的序列化数据存储在Clob中,并以sql可导航的形式显示。 基本上我的代码如下所示: 我尝试将函数放在select语句中,但这只是给出了有关未定义的语法错误。 当它运行时,错误通常与子查询返回太多值有
1回复

在sql(server 2008)内联函数中定义几个输入变量

我想修改我的内联函数,以便它可以处理两个变量作为输入。 只有一个它工作得很好。 好吧,@ membername被识别,但@tablename标有“必须声明表变量”@tablename“。”
1回复

如何在代码点火器3 + sql_server 2008上调试不良性能

在使用Code Igniter 3.0.1开发的项目中,访问SQL_server 2008数据库时,使用“真实”数据库时,响应时间非常短。 (投放任何页面的时间> 5秒)。 在多个测试环境中测试的同一项目运行良好,输出时间为“正常”(<1秒)。 因此,我认为真实数据库存
4回复

SQL-Server 2008:如何使用计数器更新字段?

在 PostgrSQL 上,我这样做没有问题: 示例:1,2,3,4,5,6... 在 MS-SQL Server 2008 上没有函数 SEQUENCE ......所以我试过这个: 但是我在那个循环中没有成功...... 例子:43,43,43,43,43... 任何解决方案的想法
3回复

sql-server-如何在sql server 2008中选择数据

万一我有两个桌子。 一个是销售表,另一个是事件表。 销售表: 和事件表: 如何只选择活动期间的销售? 例如,假日活动的结果将如下所示: