我有MySQL数据库,并且有一个名为 CALLER 的表。在表格调用者中,我需要检查列 USERNAME 中是否存在多次存在的值,如果存在则列出所有这些值。
谢谢
答案 0 :(得分:13)
通常您可以使用GROUP BY
和HAVING 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。