Ниже приведены гипотетические ситуации, которые близки к моей реальной проблеме. Таблица1
recid firstname lastname company
1 A B AAA
2 D E DEF
3 G H IJK
4 A B ABC
У меня есть таблица2, которая выглядит так
recid firstname lastname company
10 A B ABC
20 D E DEF
30 M D DIM
40 A B CCC
Теперь, если я присоединюсь к таблице по recid, она выдаст 0 результатов, дубликатов не будет, потому что recid уникален. Но если я присоединяюсь к столбцам firstname и lastname, которые не уникальны и есть дубликаты, я получаю дубликаты во внутреннем соединении. Чем больше столбцов я добавляю при объединении, тем хуже становится (создается больше дубликатов).
В приведенной выше простой ситуации, как я могу удалить дубликаты в следующем запросе. Я хочу сравнить имя и фамилию, если они совпадают, я возвращаю имя, фамилию и recid из таблицы2
select distinct * from
(select recid, first, last from table1) a
inner join
(select recid, first,last from table2) b
on a.first = b.first
Сценарий здесь, если кто-то захочет поиграть с ним в будущем
create table table1 (recid int not null primary key, first varchar(20), last varchar(20), company varchar(20))
create table table2 (recid int not null primary key, first varchar(20), last varchar(20), company varchar(20))
insert into table1 values(1,'A','B','ABC')
insert into table1 values(2,'D','E','DEF')
insert into table1 values(3,'M','N','MNO')
insert into table1 values(4,'A','B','ABC')
insert into table2 values(10,'A','B','ABC')
insert into table2 values(20,'D','E','DEF')
insert into table2 values(30,'Q','R','QRS')
insert into table2 values(40,'A','B','ABC')