Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
Birbirinden değerli Türkçe Blog yazarlarını takip edebilmek için ziyaret edebileceğiniz bir internet sitesi. yazarlar.hasscript.com
0 oy
48 gösterim
Duplicate kayıtları veritabanında silmek için güzel bir script örneği var mıdır?
Veri Tabanı kategorisinde (3.7k puan)
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
   )
;

(612 puan)
seçti

İlgili sorular

0 oy
1 cevap 29 gösterim
0 oy
2 cevap 456 gösterim
0 oy
1 cevap 13 gösterim
+1 oy
1 cevap 36 gösterim
0 oy
1 cevap 55 gösterim
...