mysql - 通过仅选择 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 条记录,并且应跳过多行。我不想以独特的密钥格式更改任何内容。有什么解决方法吗?
解决方案
你需要类似的东西:
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
尝试使用您的数据并告诉我。
推荐阅读
- java - 使用 Stream 从 int[] 数组中查找奇数
- r - html_nodes 在网站更新后不再提取表行
- c++ - 将全局命名空间中的重载函数声明为模板类的友元
- android - 在主位图的子区域上执行画布绘制的优化方式
- html - 引荐网站是否可以在发布的 html 表单中识别?
- openshift - Openshift - 环境变量被评估为主机名
- iis - 如何在 IIS7、IIS7.5 下同时使用自定义和详细错误模式
- php - 在为新的 wordpress 插件激活创建测试数据时查看值的关联数组
- silverstripe - Silverstripe 安装根文件夹 public
- php - 无法打开文件或找不到文件夹