在MySQL中查找重复值
我有一个带有varchar列的表,并且我想查找在此列中具有重复值的所有记录。 我可以用来查找重复项的最佳查询是什么?
用GROUP BY
子句做一个SELECT
。 假设名称是您想要查找重复项的列:
SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;
这将返回第一列中名称值的结果,以及该值在第二列中出现的次数。
SELECT varchar_col
FROM table
GROUP BY varchar_col
HAVING count(*) > 1;
SELECT *
FROM mytable mto
WHERE EXISTS
(
SELECT 1
FROM mytable mti
WHERE mti.varchar_column = mto.varchar_column
LIMIT 1, 1
)
该查询返回完整的记录,而不仅仅是独特的varchar_column
。
此查询不使用COUNT(*)
。 如果有很多重复项, COUNT(*)
很贵,并且您不需要整个COUNT(*)
,只需要知道是否有两行具有相同的值。
具有varchar_column
上的索引当然会大大加快此查询速度。
上一篇: Finding duplicate values in MySQL
下一篇: How can I use BFS to get a path containing some given nodes in order?