根据一列删除重复项并根据另一个表中的数据进行过滤

时间:2018-04-10 18:15:17

标签: mysql sql

我有2个表,它们根据表单的提交存储数据,并从API端点返回。我正在尝试编写一个查询,以便为所有数据表A删除重复项,同时还删除存储在表B中的测试提交。以下是删除了不相关行的表结构表结构:

表A

submission_id
email
campaign_id
rep_name

表B

email
campaign_id
is_test

表B包含每个电子邮件地址的一行,其中包含有关该提交的数据。

每个电子邮件地址和表格A应包含1-4行。 campaign_id在rep_name列中包含不同的数据,但是我在表A中有重复的行,我想用查询删除它们。离。

    Table A Data
    submission_id    email             campaign_id    rep_name
    1                test@test.com     campaign_1     john smith
    2                test@test.com     campaign_1     mary joe
    3                test@test.com     campaign_1     kevin guy
    4                test@test.com     campaign_1     john smith
    5                test@test.com     campaign_1     mary joe
    6                test@test.com     campaign_1     kevin guy
    7                real@real.com     campaign_1     john smith
    8                real@real.com     campaign_1     mary joe
    9                real@real.com     campaign_1     kevin guy
    10               real@real.com     campaign_1     john smith
    11               real@real.com     campaign_1     mary joe
    12               real@real.com     campaign_1     kevin guy
    Table B Data
    email             campaign_id    is_test
    test@test.com     campaign_1     Y
    real@real.com     campaign_1     N
    real@real.com     campaign_2     Y
    real@real.com     campaign_2     N
    test@test.com     campaign_2     Y

期望的结果

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 个答案:

答案 0 :(得分: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子句中为广告系列添加过滤器。