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