mysql - 如何编写 MySQL 选择查询来获取选择列中的重复项,但在另一个列中获取唯一的

标签 mysql sql duplicates

假设我有一个包含 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/

相关文章:

mysql - 数据库中的字符集和排序规则

java - 避免在基于 struts2 的应用程序中服务器繁忙时提交多个表单

php - SQL Query 找不到获取结果的方法

java - 乘以从数据库中选择的大十进制数

sql - 如何阻止身份列中出现 13 的倍数

python - 定期重新运行相同查询时无法获取最新行

mysql - 如何从 MySQL 表中删除除具有最新日期的行之外的所有重复行?

java - 为什么 Hibernate 会重复对象,尽管数据库表不包含重复行?

mysql - mysql 事件是否在单独的连接中运行?

MySQL "For Each"