【问题标题】:Update column in one table with values from different table without adding new rows使用来自不同表的值更新一个表中的列而不添加新行
【发布时间】:2020-03-02 13:20:46
【问题描述】:

我在两个表中有两个表和一个名为 code 的公共列。我想用表 B 中名为 set_version 的列更新表 A 中名为 version 的列的值。但这不应该添加行而只更新值。我该怎么做?

【问题讨论】:

  • 提供样本数据和期望的结果。
  • 一个UPDATE 照它说的做,它更新数据。如果您需要新数据,则需要 INSERT 语句。如果你确实需要同时做这两个,在同一个语句中,你想要MERGE

标签: sql sql-server tsql join


【解决方案1】:

您可以将updatejoin 一起使用:

update a
    set version = b.set_version
    from a join
         b
         on <some join condition here that your question does not specify>;

update 仅更新现有行。它不会向表中添加新行。

【讨论】:

  • 这会添加一个新行吗?还是只会反映我的条件匹配的那些行?
  • 不,它不会添加任何新行,因为没有发出插入命令。它只会更新匹配连接条件的行。如果没有匹配的行,则根本不会有更新。
【解决方案2】:

以上所有答案都是正确的。但为了使其更完美,我想回答我的问题,以便如果有人阅读,那么他/她应该一眼就知道......

我有什么:

有两个表 'A' 和 'B' 有一个公共列 'Code'

我想要什么:

  • 从表“B”的“Set_version”列中将值放入表“A”的“Version”列中。
  • 并且表“A”和“B”之间有一个名为“Code”的公共列。
  • 仅当公共列中的值匹配时,才会影响表 'A' 中名为 'Version' 的列的行与表 'B' 的 'Set-version' 中的值,而不在表中添加新行。如果没有匹配的行,则应该没有影响。

解决方案:

一般结构

UPDATE        targetTable
SET           targetTable.targetColumn = s.sourceColumn
FROM          targetTable t
INNER JOIN    sourceTable s
ON            t.matchingColumn = s.matchingColumn

使用我的表和列名的结构

UPDATE        dbo.A
SET           dbo.A.Version = s.Set_version
FROM          dbo.A t
INNER JOIN    dbo.B s
ON            t.Code = s.Code

这肯定会对我的场景有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2018-08-02
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多