我想返回表中的每一行,以及在特定列中具有重复值的每一行的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,但为了清晰起见,在示例中包含了名称
答案 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中的结果。