MySQL列出所有重复项[重复]
Posted
技术标签:
【中文标题】MySQL列出所有重复项[重复]【英文标题】:MySQL List All Duplicates [duplicate] 【发布时间】:2013-01-04 02:27:25 【问题描述】:可能重复:Find duplicate records in mysql
我在 MySQL 中有一个这样的表:
ID name email
1 john abc@abc.com
2 johnny abc@abc.com
3 jim eee@eee.com
4 Michael abec@awwbc.com
我怎样才能让 MySQL 查询像这样列出重复的查询?
重复搜索结果:
ID name email Duplicate
1 john abc@abc.com 2
2 johnny abc@abc.com 2
【问题讨论】:
这个问题已经得到解答:***.com/questions/854128/… 【参考方案1】:如果您可以接受以逗号分隔的列表中的 ID 和名称,那么您可以尝试:
select email, count(*) as numdups,
group_concat(id order by id), group_concat(name order by id)
from t
group by email
having count(*) > 1
这会保存一个连接,尽管结果不是关系格式。
【讨论】:
【参考方案2】:SELECT a.*, b.totalCount AS Duplicate
FROM tablename a
INNER JOIN
(
SELECT email, COUNT(*) totalCount
FROM tableName
GROUP BY email
) b ON a.email = b.email
WHERE b.totalCount >= 2
SQLFiddle Demo
为获得更好的性能,请在 EMail
列上添加 INDEX
。
或
SELECT a.*, b.totalCount AS Duplicate
FROM tablename a
INNER JOIN
(
SELECT email, COUNT(*) totalCount
FROM tableName
GROUP BY email
HAVING COUNT(*) >= 2
) b ON a.email = b.email
SQLFiddle Demo
【讨论】:
@JW 我做错了什么,或者你写的查询太复杂了?看我的回答。 @Kamil 你的查询结果必须有两条记录:ID 1 and 2
。
我猜你错过了我在这里问的问题。只有一个表,下面的表是mySQL查询的结果,而不是数据库中的另一个表。
@user1995781 查询只涉及一张表。【参考方案3】:
在MySQL forums 上检查this post,得到以下信息:
SELECT t1.id, t1.name, t1.email FROM t1 INNER JOIN (
SELECT colA,colB,COUNT(*) FROM t1 GROUP BY colA,colB HAVING COUNT(*)>1) as t2
ON t1.email = t2.email;
【讨论】:
以上是关于MySQL列出所有重复项[重复]的主要内容,如果未能解决你的问题,请参考以下文章