2013-10-22 46 views
1

我有一個這樣的示例表。在SQL中比較行

ID   Name 
1   Jane 
2   John 
3   Kevin 
4   George 
5   Jane 

的結果,我想從查詢得到將是兩個值的表:

ID   Name 
1   Jane 
5   Jane 

我知道這可能使用表2份來完成,一個則比較名稱和另一張桌子,但我無法得到這個工作,但。

-

對不起,沒加這個。我想獲取所有重複值。

我可以看到有關重複等的所有答覆,我已經看到關於使用count(*)查找重複項的stackoverflow上的帖子,但我想知道是否可以通過創建表的兩個副本(比如說t和tt),然後檢查t.name = tt.name?

+0

你知道的名稱預先或者你希望所有的重複值? –

+0

你需要先付出一些努力;我想說,人們不會首先看到一些努力就給出答案,但是這顯然不是這種情況:P(並且在任何人有任何想法並決定報復後*再次* * *今天,不,我沒有' t downvote任何答案,儘管被誘惑) – LittleBobbyTables

+0

我一直在試圖解決這個問題,現在2個小時。這很簡單,但不能得到這個工作。我試過內部連接,得到兩個表,然後在WHERE子句中檢查名稱是否匹配 - 它不起作用。因此我的問題在這裏。 – Neutrino

回答

3

我通常建議在使用的代碼,而Joinsexist,in or not in

Select A.ID,B.Name from Tablename A 
    inner join Tablename B 
    on A.Name = B.Name 
    where a.id <> b.id 

我通常不推薦這個,ID的一般應加入而不是名稱。 這裏是DEMO

+0

有沒有對a.id <> b.id的解決方法? – Neutrino

+0

@Neutrino'<>'有什麼問題? ''''''意思是'不等於'或'!=',如果你不想使用'<>'這個詞,那麼試着使用它們,因爲我通常使用'<>' – user2705620

+0

沒有任何問題它只是我發佈的問題是我的單身作業的一部分,並且<>在以前的任務中未被使用,因此對我來說似乎很尷尬。 – Neutrino

3

這樣做的一種方法是使用EXISTS()

SELECT * 
FROM tablename a 
WHERE EXISTS 
     (
      SELECT 1 
      FROM tableName b 
      WHERE a.Name = b.name 
      GROUP BY Name 
      HAVING COUNT(*) > 1 
     ) 
-1
SELECT A.* 
FROM SAMPLE_TABLE A, 
(
SELECT NAME,COUNT(*) 
FROM SAMPLE_TABLE 
GROUP BY NAME 
HAVING COUNT(*) > 1 
) B 
WHERE A.NAME = B.NAME; 
+1

只是好奇爲什麼投票呢? – Teja

0

試試這個

SELECT ID, Name 
FROM table1 
WHERE Name IN 
(SELECT Name 
    FROM table1 
    GROUP BY Name 
    HAVING COUNT(ID) > 1 
) 
ORDER BY ID 
+0

@downvoter,請解釋一下,你認爲這個答案有什麼問題嗎? –

+0

這裏有不合理的downvoters我的回答也被低估了6次-_- – user2705620