Tekrar eden kayıtları silmek-sql
Rowid kullanarak tekrar eden kayıtları silelim.
-Test işlemleri için bir tablo create edelim..
Create table TEST_TAB
(
kisi_id NUMBER,
ad VARCHAR2(100),
soyad VARCHAR2(100)
);
-Tablomuza deneme kayıtları girelim.
1 numaralı kayıt 3 defa tekrar ederken,3 numaralı kayıt 2 defa tekrar ediyor, diğerleri tekil.
INSERT INTO TEST_TAB values(1,'ÖMER','ACAR');
INSERT INTO TEST_TAB values(1,'ÖMER','ACAR');
INSERT INTO TEST_TAB values(1,'ÖMER','ACAR');
INSERT INTO TEST_TAB values(2,'AYŞE','DEMİR');
INSERT INTO TEST_TAB values(3,'ALİ','AYDIN');
INSERT INTO TEST_TAB values(3,'ALİ','AYDIN');
INSERT INTO TEST_TAB values(4,'KORHAN','ÇELİK');
INSERT INTO TEST_TAB values(5,'ZEYNEP','GÜL');
INSERT INTO TEST_TAB values(6,'FERİDUN','ÇAKMAK');
INSERT INTO TEST_TAB values(7,'SEDA','ÇAKMAK');
INSERT INTO TEST_TAB values(8,'FATİH','TÜZÜN');
– Tablomuz;
-Silinecek kayıtların listesi
SELECT * FROM test_tab x WHERE x.rowid >
(SELECT MIN(y.rowid) FROM test_tab y WHERE x.kisi_id=y.kisi_id)
-Mükerrer kayıtları silelim
DELETE FROM test_tab x
WHERE x.rowid > (SELECT MIN(y.rowid) FROM test_tab y
WHERE x.kisi_id=y.kisi_id)
-Sildikten sonra tablomuz;
Select * from TEST_TAB t;
Burda dikkat etmemiz gereken ben silme işlemini yaparken kisi_id alanı tekrar edenleri sildim.(delete’in where kısmı) siz bir kaç alanın daha tekrarına bakıyorsanız bunları da where kısmına eklemeniz gerekiyor)
Örneğin hem adı hem soyadı tekrar edenleri silelim dersek ;
DELETE FROM test_tab x
WHERE x.rowid > (SELECT MIN(y.rowid) FROM test_tab y
WHERE x.ad=y.ad
and x.soyad=y.soyad)