2010-09-26 60 views
12

我有一個MySQL數據庫:顯示在MySQL中含有相同值的所有行

ID | Name 
1 | Bob 
2 | James 
3 | Jack 
4 | Bob 
5 | James 

如何將返回所有列的列表,其中相同的名字出現不止一次,例如,我會要退貨:

1 | Bob 
2 | James 
4 | Bob 
5 | James 

我寫了一個數查詢:

SELECT Name, COUNT(Name) 
AS NumOccurrences 
FROM table 
GROUP BY Name 
HAVING (COUNT(Name) > 1) 

但這只是返回是這樣的:

Bob | 2 
James | 2 

而我想返回完整的行返回。

任何幫助將不勝感激,謝謝。

回答

7

試試這個SQL查詢:

select distinct a.name, a.id 
from table a, table b 
where a.name = b.name and a.id != b.id 
+0

我認爲這應該是選定的答案 – 2016-08-11 07:23:25

+0

當你在同一張桌子上看時,你如何應用這個? – Pim 2017-09-13 14:37:23

20

你可以用一個子做選擇

SELECT * FROM table WHERE Name IN (
    SELECT Name FROM table GROUP BY Name HAVING count(*) > 1 
) 

此外,如果你的區別匹配是多列,您可以用笛卡爾集:

SELECT * FROM table WHERE (firstName, lastName) IN (
    SELECT firstName, lastName FROM table GROUP BY firstName, lastName HAVING count(*) > 1 
) 
+0

太棒了;非常感謝。 – Simon 2010-09-26 13:09:46

+0

真棒解決方案!也爲我工作。非常感謝。 – Devner 2011-01-18 09:38:04

+0

這對於一張大桌子和很多列來說太慢了,對不起 – Novasol 2015-02-18 16:05:08

4

試試這個

SELECT Name, COUNT(Name) AS NumOccurrences 
FROM table 
GROUP BY Name 
HAVING COUNT(*) > 0 
相關問題