【问题标题】:Union Two Tables and Overwrite Preexisting Rows合并两个表并覆盖预先存在的行
【发布时间】:2025-11-29 14:40:01
【问题描述】:

我希望将两个表合并在一起,但如果表 1 中的“电子邮件”与表 2 中的“电子邮件”匹配的任何重复记录,则将提取表 2 中的数据。这个功能可以吗?

表 1

Name | Email   | Status
A    | a@a.com | 1
B    | b@b.com | 2
C    | c@c.com | 1

表 2

Name | Email   | Status
C    | c@c.com | 2
D    | d@d.com | 1
E    | e@e.com | 2

结果表

Name | Email   | Status
A    | a@a.com | 1
B    | b@b.com | 2
C    | c@c.com | 2
D    | d@d.com | 1
E    | e@e.com | 2

【问题讨论】:

  • 您有没有尝试过任何可以向我们展示的方法?
  • 我不知道从哪里开始。我正在考虑使用 Union、Update 和 Join 的组合,但无法理解语法

标签: sql-server union


【解决方案1】:

解决此问题的一种方法是针对 table1 执行 SELECT 并针对 table2 执行 WHERE NOT IN 以过滤从 table1 中选择的行,以便 table2 中存在的行都不会成为该结果的一部分 - 然后该结果可以针对 table2 进行 UNION。

这是一个示例(我的代码中的 TableA 和 TableB):

declare @TableA as Table ( Name VarChar(20), Email VarChar(20), Status INT );
declare @TableB as Table ( Name VarChar(20), Email VarChar(20), Status INT );

insert into @TableA ( Name, Email, Status ) values
  ( 'A', 'a@a.com', 1 ),
  ( 'B', 'b@b.com', 2 ),
  ( 'C', 'c@c.com', 1 )

insert into @TableB ( Name, Email, Status ) values
  ( 'C', 'c@c.com', 2 ),
  ( 'D', 'd@d.com', 1 ),
  ( 'E', 'e@e.com', 2 )

SELECT * FROM @TableA WHERE Email NOT IN ( SELECT DISTINCT Email FROM @TableB )
UNION 
SELECT * FROM @TableB

【讨论】:

    最近更新 更多