根据一列删除重复项并根据另一表中的数据进行过滤
Posted
技术标签:
【中文标题】根据一列删除重复项并根据另一表中的数据进行过滤【英文标题】:Removing duplicates based on one column and filtering based on data in another table 【发布时间】:2018-04-10 18:15:17 【问题描述】:我有 2 个表来存储基于表单提交的数据并从 API 端点返回。我正在尝试编写一个查询来为我提供删除了重复项的所有数据表 A,同时还删除了存储在表 B 中的测试提交。以下是删除了不相关行的表结构表结构:
表 A
submission_id
email
campaign_id
rep_name
表 B
email
campaign_id
is_test
表 B 包含每个电子邮件地址的一行,其中包含有关该提交的数据。
表 A 应包含每个电子邮件地址和活动 ID 的 1-4 行,在 rep_name 列中具有不同的数据,但是我在表 A 中有重复的行,我想通过查询删除这些行。例如。
表 A 数据 submission_id 电子邮件 campaign_id rep_name 1 test@test.comcampaign_1 john smith 2 test@test.comcampaign_1 玛丽乔 3 test@test.comcampaign_1 凯文盖伊 4 test@test.comcampaign_1 约翰·史密斯 5 test@test.comcampaign_1 玛丽乔 6 test@test.comcampaign_1 凯文盖伊 7 real@real.com campaign_1 约翰·史密斯 8 real@real.comcampaign_1 玛丽乔 9 real@real.comcampaign_1 凯文盖伊 10 real@real.com campaign_1 约翰·史密斯 11 real@real.comcampaign_1 玛丽乔 12 real@real.com campaign_1 凯文·盖伊 表 B 数据 电子邮件 campaign_id is_test test@test.comcampaign_1 是 real@real.comcampaign_1 N real@real.comcampaign_2 是 real@real.comcampaign_2 N test@test.comcampaign_2 是期望的结果
real@real.com campaign_1 john smith
real@real.com campaign_1 mary joe
real@real.com campaign_1 kevin guy
这是我当前对不会导致删除重复项的查询的尝试。
SELECT a.* FROM table_a a LEFT OUTER JOIN (SELECT email FROM table_b WHERE is_test='N' AND campaign_id='some_campaign_id') as b ON a.email=b.email WHERE a.campaign_id='some_campaign_id';
【问题讨论】:
【参考方案1】:这回答了问题的原始版本。
类似这样的:
select distinct a.email, a.campaign_id, a.rep_name
from a join
b
on a.email = b.email and a.campaign_id = b.campaign_id
where b.is_test = 'N';
您也可以在where
子句中为广告系列添加过滤器。
【讨论】:
不幸的是 distinct 不起作用。我应该包含一个提交 ID,该 ID 对每一行都是唯一的,因此不同的列在该列上无法正常工作 因此,使用该列提交 ID @mannr 更新示例数据和预期输出 那么这个查询仍然有效并且应该给出正确的结果..因为你没有在预期的输出中显示提交ID..@mannr..此外我认为你不需要加入真正得到正确的结果。select distinct a.email, a.campaign_id, a.rep_name from a
也可以正常工作。
@RaymondNijland 我需要加入以从表 b 中删除属于测试的提交以上是关于根据一列删除重复项并根据另一表中的数据进行过滤的主要内容,如果未能解决你的问题,请参考以下文章