Can I use a SQL query to find records where one field is identical in both? That is, can I use the following table and return 1,3 (the ids) by comparing the name columns (and ignoring the phone)?
ID | Name | Phone 1 | Bob | 5555555555 2 | John | 1234567890 3 | Bob | 1515151515 4 | Tim | 5555555555
To get all names that exist more than once you can execute this statement:
SELECT Name FROM People GROUP BY Name HAVING COUNT(*)>1;
To get the IDs of the duplicates "1,3" concatenated that way use GROUP_CONCAT:
SELECT GROUP_CONCAT( ID SEPARATOR ',' )
FROM Table
GROUP BY Name
HAVING COUNT(*) > 1
Another - not necessarily efficient - way to do this is with a self-join:
SELECT P1.Id, P2.Id
FROM People P1, People P2
WHERE P1.Id < P2.Id
AND P1.Name = P2.Name;
The first condition ensures that you only see the pair (1,3) and not the extraneous pairs (3,1) or the identical rows (1,1), (3,3).
来源:https://stackoverflow.com/questions/2053569/is-it-possible-for-sql-to-find-records-with-duplicates