t-sql 合并两个表并替换空值

Posted

技术标签:

【中文标题】t-sql 合并两个表并替换空值【英文标题】:t-sql merging two tables and replace null values 【发布时间】:2022-01-24 02:45:39 【问题描述】:

我有这两个表,我想比较一下表2中是否有空值,如果有,将表1中的现有值替换为表2中的空值(通过作为主键的代码列)。

         Table 1
Code       Name          Points
 1     Juan Perez          10
 2     Marco Salgado       5
 3     Carlos Soto         9
 4     Alberto Ruiz        12
 5     Alejandro Castro    5
 10    Jonatan Polanco     0
 11    JD                 NULL


          Table 2
Code       Name          Points
 1     Juan Perez          10
 2     Marco Salgado       5
 3     Carlos Soto         9
 4     Alberto Ruiz        12
 5     Alejandro Castro    5
 10    Null                0
 11    JD                  9

生成的表格应如下所示

         Table 2
Code       Name          Points
 1     Juan Perez          10
 2     Marco Salgado       5
 3     Carlos Soto         9
 4     Alberto Ruiz        12
 5     Alejandro Castro    5
 10    Jonatan Polanco     0
 11    JD                  9

【问题讨论】:

我尝试过合并和选择子句,但没有。我很感激你的帮助 不“将表 1 中的现有值替换为表 2 中的空值”意味着您的预期结果应包含 '10'/NULL/'0',而不是 '10' /'Jonatan Polanco'/'0'? '11'/'JD'/NULL 行不应该保持不变吗?请向我们展示您尝试过的方法并解释哪些方法不起作用。 【参考方案1】:

如果您尝试更新 Points 列中具有空值的行,您只需连接两个表并添加 where 子句以将行限制为要更新的行。像这样的

UPDATE t2
  SET Points = t.Points
FROM table_1 t
JOIN table_2 t2
  ON t.code = t2.code 
WHERE t2.Points IS NULL  

【讨论】:

以上是关于t-sql 合并两个表并替换空值的主要内容,如果未能解决你的问题,请参考以下文章

使用两个日期列合并两个表并复制行

sql合并两个表并格式化

连接两个表并在一行中合并多个关联

T-SQL 合并两个具有常见和不常见列的表

【Excel】多列数据合并为一列

如何在使用 lodash 省略空值的同时合并两个对象