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
)

:)


Leave a Reply

You must be logged in to post a comment.