I asked this question a while back para eliminar registros duplicados en función de una columna. La respuesta funcionó muy bien:¿Puedo eliminar duplicados de bases de datos basados en múltiples columnas?
delete from tbl
where id NOT in
(
select min(id)
from tbl
group by sourceid
)
Ahora tengo una situación similar, pero la definición de registro duplicado se basa en varias columnas. ¿Cómo puedo alterar este SQL anterior para identificar registros duplicados donde un registro único se define como concatenado de Col1 + Col2 + Col3. ¿Haría algo como esto?
delete from tbl
where id NOT in
(
select min(id)
from tbl
group by col1, col2, col3
)
El principio sigue en pie: no importa si la agrupación es por una o varias columnas. Vas a retener solo la primera fila de un grupo. Pero, si no le importa que lo diga, asegúrese de verificar sus datos antes de emitir la eliminación. Convierta eliminar para seleccionar y ver qué no sobrevivirá. –
@Nikola Markovinovic - parece que está haciendo lo correcto, pero solo quería confirmar – leora
@leora La sintaxis que utiliza es engorrosa para conceptualizar/aplicar ingeniería inversa. Y no se traduce bien en los casos en que la identificación puede ser nula (ya que 'no en 'no se comporta como cabría esperar cuando se trata de nulos). Me di cuenta de que no es probable que sea un factor aquí, pero es importante aprender sobre los CTE y NO EXISTE para los casos en que podría ... –