Mysql 识别具有重复电子邮件的活动成员

Mysql 识别具有重复电子邮件的活动成员,mysql,sql,Mysql,Sql,我有一个表,其中包含超过20万条记录的竞选成员。 我们有一个问题,不同的联系人共享相同的电子邮件地址,但订阅不同的活动。我需要确定的是,有重复的电子邮件给另一个联系人,但没有订阅同一组活动的任何联系人。有100个不同的活动,联系人可能会订阅所有活动。该表包含许多字段,但我需要的相关字段包括可由多个联系人共享的电子邮件、唯一且区分大小写的联系人ID和唯一且区分大小写但可分配给多个联系人的活动ID +----------------------+------------+------------+-

我有一个表,其中包含超过20万条记录的竞选成员。 我们有一个问题,不同的联系人共享相同的电子邮件地址,但订阅不同的活动。我需要确定的是,有重复的电子邮件给另一个联系人,但没有订阅同一组活动的任何联系人。有100个不同的活动,联系人可能会订阅所有活动。该表包含许多字段,但我需要的相关字段包括可由多个联系人共享的电子邮件、唯一且区分大小写的联系人ID和唯一且区分大小写但可分配给多个联系人的活动ID

+----------------------+------------+------------+-----------+-------------+---------------+
|      Email           | Contact_ID | First_Name | Last_Name | Campaign_ID | Campaign_Name |
+----------------------+------------+------------+-----------+-------------+---------------+
| John@mail.com        | 300ABC     | John       | Smith     | 100xyz      | Campaign 1    |
| Mary@mail.com        | 300abc     | Mary       | Smith     | 100wyz      | Campaign 2    |
| JonesFamily@mail.com | 300Abc     | Jim        | Jones     | 100xyz      | Campaign 1    |
| JonesFamily@mail.com | 300Abc     | Jim        | Jones     | 100Wyz      | Campaign 3    |
| JonesFamily@mail.com | 300abC     | Jane       | Jones     | 100xyz      | Campaign 1    |
| JonesFamily@mail.com | 300abC     | Jane       | Jones     | 100Wyz      | Campaign 3    |
| JonesFamily@mail.com | 300abC     | Jane       | Jones     | 100Ayz      | Campaign 4    |
+----------------------+------------+------------+-----------+-------------+---------------+

例如,Jim和Jane Jones共享一个电子邮件地址并订阅了5个活动2相同,但Jane也订阅了活动4。我需要的脚本,以确定吉姆和简,因为他们共享一封电子邮件,但不订阅同一套活动。我们的最终目标是删除一个联系人的电子邮件地址,但确保他们订阅了所有活动。

我认为您可以通过group_concat做到这一点:


子查询根据姓名获取给定联系人的活动列表;您可能有其他标准。外部查询然后选择活动不匹配的多人电子邮件。

您以前使用过distinct、group by和having吗?特别是最后两个一起?我的SQL知识非常基础。我使用过DISTINCE和group by,但从未使用过。好的,我会稍等,有人会回答,否则我会问你如何识别联系人?仅根据姓名?我们使用联系人ID将联系人识别为该联系人的唯一联系人,其中不同联系人的名字和姓氏可能相同,在某些情况下,如果有同名的父子,他们甚至可以共享一个电子邮件地址Jim Jones email,Jim Jones email可能是两个人。Jim 2是Jim Jr.@drew说Jim Jones可能是不同的人,联系人id是唯一的标识符。但问题是,它需要区分大小写,因为根据表中的示例,组成ID的字符对于不同的联系人可能是相同的,只是有些是大写或小写。在这种情况下,单词选择不当@M.Milburn。事实上,这个词应该从英语中删除,因为说话人的意思是它应该很简单,去做吧,而听者是,哦,真的吗?我每天都会从中得到乐趣,因为我遇到了很多人:
select email, group_concat(firstname, ' ', lastname) as commonnames
from (select email, firstname, lastname,
             group_concat(distinct campaign_id order by campaign_id) as campaigns
      from table t
      group by email, firstname, lastname
     ) en
group by email
having count(*) > 1 and min(campaigns) <> max(campaigns);