vt de tekrarlayan kayıtların silinmesi

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

vt de tekrarlayan kayıtların silinmesi

Mesaj gönderen eren2000 »

Arkadaşlar forumda arattım. Bazı çözümler buldum ama bunlar sonuç vermedi. Herkese gerekli olan birşey bu. Aynı tablodaki mükerrer kayıtları silmeye çalışıyorum ama olmadı. Mustafa hocamın çözümünün olacağını düşünmüştüm ama o da sonuç vermedi. Yardım eden olursa sevinirim. Veri tabanım Oracle1.8.5 ve Firebird 1.5 ikisi içinde kullanacağım. Teşekkürler.
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Çok büyük eksiklik bence

Mesaj gönderen eren2000 »

Bence sql de böyle birşey olmaması çok büyük eksiklik. Bizi kısır döngüye sokan bir neden de şudur: select distinct ile birden fazla sütun tanımladığımızda bütün sütunlara göre distict koşulunu kullanıyor. Oysa istediğimiz alana göre disict yapsa iş çözülmüş olur. Diğer anlatılan yolların tamamını denedim. Mustafa hocamın ki en mantıklı geldi ve onu yaptım ama
oldukça yavaş oldu.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Mrb; sorunu tam anlamadığım için farklı cevaplar vereceğim.
1-Bir şarta göre aynı olan kayıtların hepsini silmek istersen:

Kod: Tümünü seç

delete from tablo where id in (select id from tablo group by id having count(id)>1)
bu komut en az bir çift olan tüm kayıtları siler. Kısacası id alanından aynı olan kayıt bulursa bu aynı olan kayıtların hepsi gidecek ve o id değerinden kayıt kalmayacaktır.

2-Eğer kayıtlardan birini silmeden diğerlerini silmek istiyorsan bu ancak tablonda unique index varsa mümkündür:

Kod: Tümünü seç

delete from tablo where id in (select id from tablo group by id having count(id)>1) and unq_alan>(select min(unq_alan) from tablo as t where t.id=tablo.id)
Bu kod ise unq_alan değerlerinden minimum değerde olanların haricindeki aynı olan kayıtları silecektir. Kısaca id değerlerinden aynı olan kayıtları bulacak fakat unq_alan değerine göre en küçük değerde olan kayıt tablonda kalacak ve diğerleri tablondan silinecektir. Kolay gelsin.

Not:SQL Server üzerinden bu kodlar çalışıyor.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla