【问题标题】:SQL update table 1 with id from table 2 if match the name如果名称匹配,则 SQL 使用表 2 中的 id 更新表 1
【发布时间】:2020-05-28 11:57:32
【问题描述】:

谁能帮忙解决以下问题?

我有 2 个表,我需要使用表#2 中的数据更新表#1,如下例所示

表一:

ID - 名称 - 引擎 ID

1 - x - NULL

表 2:

ID - 名称

0 - x

结果(表一):

ID - 名称 - 引擎 ID

1 - x - 0

在表 1 上使用循环

【问题讨论】:

  • (1) 不能使用select 语句更新数据。 (2) 你需要一个数据库标签。

标签: sql join sql-update


【解决方案1】:

虽然您没有标记您的数据库产品,但许多 SQL 后端的语法几乎相同:

update table1
set engineId = t2.Id
from table1 t1 
inner join table2 t2 on t1.Name = t2.Name;

这里是DBFiddle Demo for SQL Server

编辑:如果您使用的是 MySQL,它的语法会有些特殊:

update Table1 t1
inner join Table2 t2 on t1.Name = t2.Name
set t1.engineId = t2.Id;

【讨论】:

  • 但是我怎样才能检查条目并且只有在表 1 中的名称(或子名称)匹配或存在于表 2 中然后更新?
  • @samisaw,你是什么意思?上面的代码就是这样做的,不是吗?
【解决方案2】:

在大多数数据库中,您可以使用相关子查询来做到这一点:

update t1
set engine_id = (select engine_id from t2 where t2.name = t1.name)
where engine_id is null

请注意,要使其正常工作,t2 中不应有重复的 name(否则,子查询可能会返回多行,从而导致查询出错)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2021-02-06
    • 2013-02-18
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2016-11-18
    相关资源
    最近更新 更多