联合二表并覆盖先行行

时间:2015-10-06 16:23:02

标签: sql-server union

我希望将两个表结合在一起,但是如果有任何重复记录,那么" Email"从表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

1 个答案:

答案 0 :(得分:2)

解决此问题的一种方法是针对table1对table1执行SELECT以对表2中的WHERE NOT IN进行过滤,以便过滤从table1中选择的行,以便table2中存在的所有行都不会成为其中的一部分结果 - 那么结果可以是UNION' d对table2。

以下是一个示例(我的代码中的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