0 oy
76 gösterim
Duplicate kayıtları veritabanında silmek için güzel bir script örneği var mıdır?
kapalı
Veri Tabanı kategorisinde (3.8k puan) | 76 gösterim
Duplicate kaydın kendisi dahil mi ? yoksa duplicate'i olan kaydın kendisi haricindeki diğer benzerlerini mi silecek :)
Tek kayıt kalacak şekilde.

1 cevap

0 oy
En İyi Cevap

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
   )
;

(584 puan)
seçti

İlgili sorular

0 oy
1 cevap
0 oy
2 cevap
0 oy
1 cevap
0 oy
1 cevap
15 Şubat 2018 Veri Tabanı kategorisinde buzel (584 puan) sordu | 87 gösterim
Birbirinden değerli Türkçe Blog yazarlarını takip edebilmek için ziyaret edebileceğiniz bir internet sitesi. yazarlar.hasscript.com