协慌网

登录 贡献 社区

在 MySQL 中寻找重复值

我有一个带有 varchar 列的表,我想在此列中查找具有重复值的所有记录。我可以用来查找重复项的最佳查询是什么?

答案

使用GROUP BY子句执行SELECT 。假设name是您要在其中查找重复项的列:

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上建立索引将大大加快此查询的速度。