首页 > 解决方案 > 通过仅选择 1 行并跳过其余行来解决具有重复主键的 2 个表的联合

问题描述

我有 2 个表,我正在使用以下查询加入它们

Select distinct EmailAddress,CUSTOMER_ID,Send_Date,Unique_key,sub_category
from table1

UNION ALL

Select distinct EmailAddress,CUSTOMER_ID,Send_Date,Unique_key,sub_category
from table2

我使用 Unique_key 作为主键。它是发送日期+客户ID的串联。有时两个表都可以有重复的键,因此我想在这种情况下使用上面的查询只取 1row

Table 1                 
EmailAddress       CUSTOMER_ID  Send_Date   Unique_key  sub_category
a@gmail.com        1001         07-08-2021  70820211001 chair
                
                
Table 2             
EmailAddress       CUSTOMER_ID  Send_Date   Unique_key  sub_category
a@gmail.com        1001         07-08-2021  7082021100  book
                

预期的结果是什么?

EmailAddress    CUSTOMER_ID Send_Date   Unique_key  sub_category
a@gmail.com     1001        07-08-2021  70820211001 chair

最终表中应仅出现 1 条记录,并且应跳过多行。我不想以独特的密钥格式更改任何内容。有什么解决方法吗?

标签: mysqlunion

解决方案


你需要类似的东西:

Select distinct EmailAddress,CUSTOMER_ID,Send_Date,sub_category
from table_1
UNION 
SELECT EmailAddress,CUSTOMER_ID,Send_Date,sub_category FROM table_2 
WHERE NOT EXISTS ( SELECT NULL 
                   FROM table_1 
                   WHERE table_1.EmailAddress = table_2.EmailAddress ) ;

下面的选择将返回空集,因为你WHERE NOT EXISTS有条件,返回不匹配的行。

SELECT EmailAddress,CUSTOMER_ID,Send_Date,sub_category 
FROM table_2 
WHERE NOT EXISTS ( SELECT NULL 
                   FROM table_1 
                   WHERE table_1.EmailAddress = table_2.EmailAddress 
                  ) ;

演示:https ://www.db-fiddle.com/f/pB6b5xrgPKCivFWcpQHsyE/24

尝试使用您的数据并告诉我。


推荐阅读