2013-11-22 48 views
2

我有MySQL數據庫,並且有一個表名爲CALLER。在表呼叫者我需要檢查是否在列USERNAME有值存在多次,如果存在列出所有這些值。MySQL檢查值是否存在不止一次

謝謝

+0

可能的重複http://stackoverflow.com/questions/3862288/mysql-query-to-find-duplicate-row –

回答

10

Ususlly您可以用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 
) 
+0

謝謝大家,但我可以列出他們:[email protected] [email protected] [email protected] – Fi3n1k

+0

@ Fi3n1k我已添加更新的查詢。 – valex

1

之前得到答案....

如果您提供了完整版本,這將是一個幫助表結構(作爲CREATE TABLE語句)

如果您需要應用此練習,它意味着您的數據庫設計是錯誤的 - 並且在確定了重複項並解決它們之後,您應該在相關列上添加唯一索引。

假設你有一個自動遞增字段,或者一些其它的值(如創建日期),其與相同的用戶名行之間的區別....

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。