Bunlardan fazla olan kayıtları silmek için ROWID den yararlanabiliriz.
/*Birden çok kaydın fazla olanlarını silip tek kayda indirmek*/
DELETE from Tablo1 t where rowid NOT IN (select min(rowid) from Tablo1 b where t.ogrenci_no = b.ogrenci_no and t.kayit_durum = b.kayit_durum group by b.ogrenci_no, b.kayit_durum);
Tablolarda Indeksleme yapmadığımız alanlar için insert cümlesine kontroller ekleyebiliriz, böylece çift kayıt atılmasını önlemiş oluruz:
/*Insert cümlesinde kayıt durumu kontrolü*/
INSERT INTO tbl_ogrenci t (tbl_ogrenci_no, tbl_ogrenci_ad, tbl_kayit_durum) select 87, 'Eray', 'A' from dual where not exists (SELECT * FROM tbl_ogrenci o WHERE o.tbl_ogrenci_no = t.tbl_ogrenci_no AND o.tbl_kayit_durum = 'A');
Hiç yorum yok:
Yorum Gönder