Ниже приведены гипотетические ситуации, близкие к моей реальной проблеме. Table1
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 уникален. Но если я присоединяюсь к первому и последнему столбцам, которые не являются уникальными, а есть дубликаты, я получаю дубликаты во внутреннем соединении. Чем больше столбцов я добавляю в join, тем хуже становится (создается больше дубликатов).
В приведенной выше простой ситуации, как удалить дубликаты в следующем запросе. Я хочу сравнить firstname и lastname, если они совпадают, я возвращаю firstname, lastname и recid from table2
select distinct * from
(select recid, first, last from table1) a
inner join
(select recid, first,last from table2) b
on a.first = b.first
Script здесь, если кто-то хочет играть с ним в будущем
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')