sql - Eliminar registros duplicados basados en columnas mĂșltiples
ruby-on-rails activerecord (1)
En nuestro sistema ejecutamos importaciones por hora desde una base de datos externa. Debido a un error en los scripts de importación, ahora hay algunos registros duplicados.
Un duplicado se considera donde cualquier registro tiene el mismo :legacy_id
y :company
.
¿Qué código puedo ejecutar para encontrar y eliminar estos duplicados?
Estaba jugando con esto:
Product.select(:legacy_id,:company).group(:legacy_id,:company).having("count(*) > 1")
Parecía devolver algunos de los duplicados, pero no estaba seguro de cómo eliminar desde allí.
¿Algunas ideas?
Puedes probar el siguiente enfoque:
Product.where.not(
id: Product.group(:legacy_id, :company).pluck(''min(products.id)'')
).delete_all
O sql puro:
delete from products
where id not in (
select min(p.id) from products p group by p.legacy_id, p.company
)