Autor Zpráva
Pavel Straka
Profil
Dobrý večer, rád bych požádal zkušenější o radu, jak postupovat, když chci elegantně odstranit duplicitní záznamy (na základě shody dat v jednom sloupci) v rámci 1 tabulky - chci zachovat jen 1 záznam/řádek.

Děkuji za ochotu pomoci.
Tori
Profil
Pavel Straka:
chci zachovat jen 1 záznam
Který - s nejvyšším ID, nebo podle čeho se pozná?


Pokud byste chtěl zachovat záznamy s nejvyšším ID, tak to bude vypadat asi takhle:
DELETE t1
FROM tabulka t1
INNER JOIN (SELECT MAX(id) id, dupl FROM tabulka GROUP BY dupl) ref
    ON t1.id != ref.id AND t1.dupl = ref.dupl
- sloupec "dupl" je ten s duplicitními hodnotami. sloupec "id" nesmí obsahovat duplicity.
- pro každou hodnotu ve sloupci duplicit najdete řádek, který se má zachovat a joinem (= ke smazání) vyberete ty ostatní
Kajman
Profil
Tori:
Možná by bylo o chlup rychlejší přidat do té závorky having.

Pavel Straka:
Případně se dají použít i obdoby z faq.
Tori
Profil
Kajman:
Tak tentokrát jsem zapomněla, že to máme ve FAQ, pardon, odkázala bych.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: