MySQL检查值是否存在多次

时间:2013-11-22 11:01:38

标签: mysql

我有MySQL数据库,并且有一个名为 CALLER 的表。在表格调用者中,我需要检查列 USERNAME 中是否存在多次存在的值,如果存在则列出所有这些值。

谢谢

2 个答案:

答案 0 :(得分:13)

通常您可以使用GROUP BYHAVING COUNT(*)>1

执行此操作
SELECT USERNAME FROM CALLER
GROUP BY USERNAME 
HAVING COUNT(*)>1

更新:获取所有重复的行:

SELECT * FROM CALLER WHERE USERNAME IN
  ( 
    SELECT USERNAME FROM CALLER
    GROUP BY USERNAME 
    HAVING COUNT(*)>1
  )

答案 1 :(得分:1)

在得到答案之前......

如果您提供了完整的表结构(作为CREATE TABLE语句),这将是一个帮助

如果您需要应用此练习,则意味着您的数据库设计错误 - 在您确定了重复项并解决了它们之后,您应该在相关列上添加唯一索引。

假设您有一个自动增量字段或其他值(例如创建日期),这些值区分具有相同USERNAME的行....

 SELECT a.id, username, b.id
 FROM caller a
 INNER JOIN caller b
 ON a.username=b.username
 AND b.id>a.id

请注意,如果用户名超过2行,则会多次报告一些行。交替:

SELECT username, COUNT(DISTINCT id), MIN(id), MAX(id)
FROM caller
GROUP BY username
HAVING count(*)>1

但是,这不会明确标识具有特定用户名的超过2行的所有ID。