validar repetidos quitar omitir eliminar duplicidad duplicados duplicado consulta como sql join

repetidos - Eliminar duplicados de SQL Unirse



sql omitir repetidos (2)

No desea hacer una unión per se, simplemente está probando la existencia / establecer la inclusión.

No sé qué sabor actual de SQL estás codificando, pero debería funcionar.

SELECT MAX(recid), firstname, lastname FROM table2 T2 WHERE EXISTS (SELECT * FROM table1 WHERE firstname = T2.firstame AND lastname = T2.lastname) GROUP BY lastname, firstname

Si desea implementar como una unión, dejando el código en gran medida el mismo:

es decir

SELECT max(t2.recid), t2.firstame, t2.lastname FROM Table2 T2 INNER JOIN Table1 T1 ON T2.firstname = t1.firstname and t2.lastname = t1.lastname GROUP BY t2.firstname, t2.lastname

Dependiendo del DBMS, una unión interna puede implementarse de manera diferente a un Exists (semi-join vs join) pero el optimizador a veces puede resolverlo de todos modos y elegir el operador correcto independientemente de la forma en que lo escriba.

La siguiente es una situación hipotética que está cerca de mi problema real. Tabla 1

recid firstname lastname company 1 A B AAA 2 D E DEF 3 G H IJK 4 A B ABC

Tengo una mesa2 que se parece a esto

recid firstname lastname company 10 A B ABC 20 D E DEF 30 M D DIM 40 A B CCC

Ahora si me uno a la tabla en recid, dará 0 resultado, no habrá duplicados porque 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 firstname y lastname, si coinciden, devuelvo firstname, lastname y recid de 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

El script está 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'')


SELECT t2.recid, t2.first, t2.last FROM table1 t1 INNER JOIN table2 t2 ON t1.first = t2.first AND t1.last = t2.last GROUP BY t2.recid, t2.first, t2.last

EDITAR: Imagen añadida