vt de tekrarlayan kayıtların silinmesi
vt de tekrarlayan kayıtların silinmesi
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.
Çok büyük eksiklik bence
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.
oldukça yavaş oldu.
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Mrb; sorunu tam anlamadığım için farklı cevaplar vereceğim.
1-Bir şarta göre aynı olan kayıtların hepsini silmek istersen: 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: 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.
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)
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)
Not:SQL Server üzerinden bu kodlar çalışıyor.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .