Frage

Kann ich eine SQL-Abfrage Datensätze zu finden, wo ein Feld in beide identisch ist? Das heißt, ich kann die folgende Tabelle verwenden und zurück 1,3 (die ids) durch den Namen Spalten zu vergleichen (und ignoriert das Telefon)?

    ID | Name | Phone

    1  | Bob  | 5555555555
    2  | John | 1234567890
    3  | Bob  | 1515151515
    4  | Tim  | 5555555555
War es hilfreich?

Lösung

Um alle Namen zu erhalten, die mehr vorhanden sind, als wenn Sie diese Anweisung ausführen können:

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

Andere Tipps

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

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

Ein weiterer - nicht unbedingt effizient - Weg, dies zu tun, ist mit einer Selbstverknüpfung:

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 sehen (1,3) und nicht die Fremdpaar (3,1) oder die identischen Reihen (1,1), (3,3).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top