2010-01-13 10 views
5

Kann ich eine SQL-Abfrage verwenden, um Datensätze zu finden, bei denen ein Feld in beiden identisch ist? Das heißt, kann ich die folgende Tabelle verwenden und 1,3 (die IDs) zurückgeben, indem ich die Namensspalten vergleiche (und das Telefon ignoriere)?Kann SQL Datensätze mit Duplikaten finden?

 
    ID | Name | Phone 

    1 | Bob | 5555555555 
    2 | John | 1234567890 
    3 | Bob | 1515151515 
    4 | Tim | 5555555555

Antwort

10

alle Namen zu erhalten, die mehr vorhanden sind, als wenn Sie diese Anweisung ausführen kann:

SELECT Name FROM People GROUP BY Name HAVING COUNT(*)>1; 
+1

Um die IDs zu erhalten, müssen Sie wahrscheinlich die obige Anweisung mit einer anderen SELECT-Anweisung verwenden. Etwas wie: SELECT id FROM [Tabellenname] WHERE NAME IN (SELECT Name FROM [Tabellenname] GROUP BY-Bezeichnung COUNT (*)> 1) würde –

+1

Eine Sache, die ich ist hinzufügen wollte arbeiten, dass Sie brauchen Seien Sie vorsichtig, wenn Sie Namen als Identifikator verwenden, um zu entscheiden, ob ein Datensatz ein Duplikat ist oder nicht, denn wenn Sie nicht sicher sind, dass es nie zwei Personen mit demselben Namen in Ihrer Tabelle geben wird, geraten Sie in Schwierigkeiten. –

2

Um die IDs der Duplikate „1,3“ verketteten zu erhalten auf diese Weise GROUP_CONCAT verwenden:

SELECT GROUP_CONCAT(ID SEPARATOR ',') 
FROM Table 
GROUP BY Name 
HAVING COUNT(*) > 1 
0

ein weiteres - nicht unbedingt effizient - Weg, dies mit einem tun, selbst beitreten:

SELECT P1.Id, P2.Id 
    FROM People P1, People P2 
WHERE P1.Id < P2.Id 
    AND P1.Name = P2.Name; 

Die erste Bedingung stellt sicher, dass Sie nur das Paar (1,3) und nicht die Fremdpaare (3,1) oder die identischen Reihen (1,1), (3,3) sehen.

Verwandte Themen