合并两个表并覆盖先前存在的行
Union Two Tables and Overwrite Preexisting Rows
我希望将两个表合并在一起,但是如果有任何重复记录,其中 "Email" 来自 Table 1 匹配 "Email" 来自 Table 2,那么来自 Table 2 的数据将被提取。这个功能可以吗?
Table 1
Name | Email | Status
A | a@a.com | 1
B | b@b.com | 2
C | c@c.com | 1
Table 2
Name | Email | Status
C | c@c.com | 2
D | d@d.com | 1
E | e@e.com | 2
结果Table
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
解决此问题的一种方法是对 table1 执行 SELECT
,对 table2 执行 WHERE NOT IN
以过滤从 table1 中选择的行,以便 none 中存在的行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
我希望将两个表合并在一起,但是如果有任何重复记录,其中 "Email" 来自 Table 1 匹配 "Email" 来自 Table 2,那么来自 Table 2 的数据将被提取。这个功能可以吗?
Table 1
Name | Email | Status
A | a@a.com | 1
B | b@b.com | 2
C | c@c.com | 1
Table 2
Name | Email | Status
C | c@c.com | 2
D | d@d.com | 1
E | e@e.com | 2
结果Table
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
解决此问题的一种方法是对 table1 执行 SELECT
,对 table2 执行 WHERE NOT IN
以过滤从 table1 中选择的行,以便 none 中存在的行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