2015-01-10 3 views
2

Я хочу возвратить каждую строку в таблице вместе с идентификатором каждой строки, которая имеет дублирующее значение в определенном столбце. Я могу получить все дубликаты достаточно легко, но мне нужно, чтобы вернуть больше данныхЗапрос для возврата всех дубликатов для всех строк

Пример данных:

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

Если я матч на LastName, я хотел бы вернуться

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 

Я действительно только необходимо вернуть идентификаторы, но в них приведены имена в этом примере.

ответ

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.

+0

Спасибо, я переоценил решение. Одна маленькая настройка, хотя и соответствует по фамилии. Добавить условие t1.LastName = t2.LastName – user4440261

Смежные вопросы