查询以返回所有行的所有重复项

时间:2015-01-10 16:12:47

标签: mysql

我想返回表中的每一行,以及在特定列中具有重复值的每一行的id。我可以轻松地获得所有重复项,但我需要返回更多数据

示例数据:

--------------------------------
| Firstname   | Lastname  | ID |
--------------------------------
| John        | Smith     |  1 |
--------------------------------
| Jane        | Smith     |  2 |
--------------------------------
| Bill        | Smith     |  3 |
--------------------------------

如果我在姓氏上匹配,我想返回

ID    Firstname   Lastname   dup_Fname  dup_Lname dup_id
1     John        Smith      Jane       Smith     2
1     John        Smith      Bill       Smith     3
2     Jane        Smith      John       Smith     1
2     Jane        Smith      Bill       Smith     3
3     Bill        Smith      John       Smith     1
2     Bill        Smith      Jane       Smith     2

我真的只需要返回ID,但为了清晰起见,在示例中包含了名称

1 个答案:

答案 0 :(得分:1)

您可以通过使用不同的别名将表连接起来来实现此目的:

SELECT T1.ID, T1.FirstName, T1.LastName,
       T2.FirstName as dup_FName, T2.LastName as dup_LName, T2.ID as dup_id
FROM TableName T1, TableName T2
WHERE T1.ID <> T2.ID
ORDER BY T1.ID,T2.ID

结果:

ID  FIRSTNAME   LASTNAME    DUP_FNAME   DUP_LNAME   DUP_ID
1   John        Smith       Jane        Smith       2
1   John        Smith       Bill        Smith       3
2   Jane        Smith       John        Smith       1
2   Jane        Smith       Bill        Smith       3
3   Bill        Smith       John        Smith       1
3   Bill        Smith       Jane        Smith       2

请参阅SQL Fiddle中的结果。