La siguiente es una situación hipotética que está cerca de mi problema real. Tabla 1Eliminar duplicados de SQL Unirse
recid firstname lastname company
1 A B AAA
2 D E DEF
3 G H IJK
4 A B ABC
Tengo una tabla2 que se parece a este
recid firstname lastname company
10 A B ABC
20 D E DEF
30 M D DIM
40 A B CCC
Ahora bien, si me uno a la tabla de la recid, que dará a 0 resultado, no habrá duplicados debido a recid es único. Pero si me uno a las columnas firstname y lastname, que no son únicas y hay duplicados, obtengo duplicados en la combinación interna. Cuantas más columnas agregue en join, peor se vuelve (se crean más duplicados).
En la situación simple anterior, ¿cómo puedo eliminar duplicados en la siguiente consulta. Quiero comparar nombre y apellido, si coinciden, vuelvo nombre, apellido y recid de tabla2
select distinct * from
(select recid, first, last from table1) a
inner join
(select recid, first,last from table2) b
on a.first = b.first
guión es aquí si alguien quiere jugar con él en el futuro
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')
¿Necesita la recid vuelta - si no, suprimirla de la consulta podría solucionar el problema. – Paddy
sí, de lo contrario, he hecho el resto. –
Tienes que decidir sobre la lógica para tus filas que no son dupe. CompanyId y RecId son diferentes para sus engaños. ¿Cuál de estos quieres conservar> – JNK