MSSQL – traženje i brisanje duplikata
Problem:
Treba naći podatke u bazi koji se pojavljuju više od jednom. Dakle u pitanju je rješavanje duplića.
Rješenje:
SELECT ime, COUNT(ime) AS BrojPojavljivanja FROM tbl_tablica GROUP BY ime HAVING ( COUNT(ime) > 1 ) ORDER BY BrojPojavljivanja DESC
Ok.. s time smo riješili traženje duplikata… ali kako ih maknuti, a da pri tome ne dobijemo probavne probleme?!
Gore navedeni query nam je rekao koji je podatak u pitanju i koliko ima istih, s time da je i onaj prvi koji nam treba u tom broju…
Slijedi jedan malo “seljačkiji” query ali nekako najpraktičniji za rješavanje ovih problema u kućnoj radinosti
SELECT * FROM tbl_tablica WHERE id > ( SELECT min(id) FROM tbl_tablica x WHERE x.ime = tbl_tablica.ime )
Ovim queryjem smo selektirali podatke samo onih redova koji su nam višak. Unutar queryja se ne nalazi ono jedno pojavljivanje koje nam treba nego samo duplikati tog jednog koji su nam višak.
Brisanje?
DELETE FROM tbl_tablica WHERE id > ( SELECT min(id) FROM tbl_tablica x WHERE x.ime = tbl_tablica.ime )
:)