假设我有一个包含 3 列 A、B、C 的表。我想要一个结果集,该结果集表示那些 A 或 B 具有多个/重复条目但 C 具有唯一条目的条目。
我知道 GROUP BY 子句在这种情况下会派上用场,但它似乎比这更复杂。
例如: 假设一个包含客户信息的表,其中包含以下列: 1)身份证号码 2)电话 3)电子邮件 4)账户
获取多次出现相同电话或电子邮件但属于不同帐户的 ID。例如,对于原始表中的以下条目:
1) ID:12 |电话:111-111-1111 |电子邮件:johnc@email.com |帐号:2
2) ID:14 |电话:111-111-1111 |电子邮件:jcena@gmail.com |帐号:5个
3) ID:15 |电话:123-234-7890 |电子邮件:jdoe@email.com |帐号:12
4) ID:21 |电话:900-893-4563 |电子邮件:jdoe@email.com |帐号:23
5) ID:17 |电话:222-333-1111 |电子邮件:abet@email.com |帐号:3
6) ID:19 |电话:222-333-1111 |电子邮件:abet@email.com |帐号:3
结果行如下:
1)ID:12、14 |帐户:2、5
2)ID:15、21 |帐户:12、23
条目 #5 和 #6 未包含在内,因为帐户值没有不同,尽管电话和电子邮件相同。
提前致谢!
最佳答案
您可以使用group by和group concat来收集所有id和accountno值。要通过电子邮件或电话号码删除重复项,请使用不同计数。通过 Union all 合并所有结果。 Union 比 union 更好,因为我们确信重复项已被删除。
演示:http://sqlfiddle.com/#!9/e0af39/2
Select group_concat(id order by id) as id,
group_concat(accountNo order by accountNo) as
accountno
From Tbl
Group by Email
Having count(distinct accountno) > 1
UNION ALL
Select group_concat(id order by id) as id,
group_concat(accountNo order by accountNo) as
accountno
From Tbl
Group by Phone
Having count(distinct accountno) > 1
Result:
id accountno
13,17 4,8
12,14 2,5
关于mysql - 如何编写 MySQL 选择查询来获取选择列中的重复项,但在另一个列中获取唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49524167/