Duplicate kayıtları veritabanında silmek için güzel bir script örneği var mıdır?
comments
3 references
// Comments are closed.
Duplicate kayıtları veritabanında silmek için güzel bir script örneği var mıdır?
// Comments are closed.
Duplicate kaydın kendisi dahil mi ? yoksa duplicate’i olan kaydın kendisi haricindeki diğer benzerlerini mi silecek 🙂
Tek kayıt kalacak şekilde.
Bunu birkaç şekilde halledebilirsiniz. Eğer tablo çok büyükse, RANK fonksiyonu ile tabloyu birkez okuyarak halledebilirsiniz. Örnek olarak aşağıdaki scripti baz alabilirsiniz.
delete from $table_name where rowid in ( select "rowid" from (select "rowid", rank_n from (select rank() over (partition by $primary_key order by rowid) rank_n, rowid as "rowid" from $table_name where $primary_key in (select $primary_key from $table_name group by $all_columns having count(*) > 1 ) ) ) where rank_n > 1 )Ya da tabloyu yine kendisiyle tüm kolonlar üzerinden joinleyerek aşağıdaki örnekteki gibi halledebilirsiniz.
her iki örnekte de duplicate durumunu karşılaştıracağınız tüm kolonları yazmalısınız. (ilk örnekte, group by ifadesin, alttaki örnekte where koşulunda)
delete from
table_name a
where
a.rowid >
any (select b.rowid
from
table_name b
where
a.col1 = b.col1
and
a.col2 = b.col2
)
;