Db2′ da birden fazla olan kayıtların silinmesi (delete duplicate records in db2)
Posted by: Sadettin Polat in genel, kod ornekleri, veritabanları, tags: db2, sqlTabloda tek bir veri saklayacagimi bilsem dahi butun tablolarima ID alani muhakkak eklerim.
Birkac gun once karsima bir tablo cikti ve mukerrer kayitlarin silinmesi gerekiyor. Isin ilginc tarafi tabloda id alani olarak kullanilabilecek bir alan mevcut degil.
Bircok veritabani tarafindan desteklenen RowID ozelligiyle ya da distinct ile yapilan bir select ifadesinden donen degerleri insert ile baska bir tabloya yazarak problemi kolayca cozebilecegimi dusunsemde db2 ‘ da rowid ozelligi bekledigimden farkli calisinca biraz ugrasmak zorunda kaldim. Yeni bir tablo olusturmadan tek bir sql ile isi cozmek kolayima geldiginden ufak bir arastirmayla db2 da ki row_number fonksiyonu ile isimi cozebildim.
TEST3 //tablo adi =============== TCNO //field adi 11111111111 22222222222 33333333333 11111111111 11111111111 33333333333 33333333333 22222222222 22222222222 delete from (SELECT ROW_NUMBER() OVER (ORDER BY TCNO ASC) AS rownumber , TCNO FROM TEST3 ) AS TEST_SIL where TEST_SIL.rownumber > (select min(TEST_SIL2.rownumber) from (SELECT ROW_NUMBER() OVER (ORDER BY TCNO ASC) AS rownumber , TCNO FROM TEST3 ) AS TEST_SIL2 WHERE TEST_SIL.TCNO = TEST_SIL2.TCNO);
sorguyu calistirdiktan sonra ki tablonun yeni hali.
TEST3 =============== TCNO 11111111111 22222222222 33333333333


Entries (RSS)