Jak vyhledat duplicity v MySQL
Pokud chcete zjistit, zda vaše databázová tabulka obsahuje duplicitní hodnoty a chcete je navíc vypsat - následující řádky vám mohou být nápomocné.
SQL dotaz pro zjištění duplicitních hodnot v rámci jednoho sloupce:
SELECT sloupec, COUNT(sloupec) AS pocet_vyskytu FROM tabulka GROUP BY sloupec HAVING pocet_vyskytu > 1
Výsledkem bude tabulka, kde budou vypsány hodnoty ze sloupce sloupec, které se v tabulce vyskytují více než jedenkrát. Jinými slovy jsou duplicitní, tedy neobsahují unikátní hodnoty. Pokud byste chtěli na tomto sloupci vytvořit unikátní klíč unique, systém by nahlásil chybu číslo #1062 – Duplicate entry.
Pokud potřebujete vypsat i počet výskytů jednotlivých hodnot seřazených sestupně podle jejich četnosti výskytu, může vám posloužit tento dotaz:
SELECT sloupec, COUNT(sloupec) AS pocet_vyskytu FROM tabulka GROUP BY sloupec ORDER BY pocet_vyskytu DESC
SQL dotaz pro zjištění duplicit založených na více hodnotách:
Předpokládejme, že potřebujete zjistit, zda vaše tabulka neobsahuje duplicity, které by se skládaly z více hodnot – například v tabulce obsahující informace o zaměstnancích chcete zjisitit zda neexistují duplicity ve jménech, které jsou složeninou sloupců jmeno a prijmeni. Jistě existuje možnost tyto sloupce v dotazu zřetězit dohromady a pak použít výše uvedený postup, ale v této části článku vám chceme demonstrovat způsob hledání duplicit založený na takzvaném self-join řešení.
Příklad si ukážeme na jednoduché tabulce sestávající ze tří sloupců - id, jmeno a prijmeni.
INSERT INTO `tabulka` (`id`, `jmeno`, `prijmeni`) VALUES
(1, 'Jan', 'Novák'),
(2, 'Karel', 'Novák'),
(3, 'František', 'Dlouhý'),
(4, 'Jan', 'Novák'),
(5, 'Jana', 'Nováková'),
(6, 'František', 'Dlouhý'),
(7, 'Jan', 'Novák');

Pro vyhledání duplicitních jmen v tomto případě může posloužit tento dotaz založený na self-join spojení:
SELECT tab1.id AS id, tab2.id AS id_duplicitni_hodnoty, tab1.jmeno, tab2.prijmeni
FROM tabulka AS tab1
JOIN tabulka AS tab2 ON tab1.jmeno = tab2.jmeno
AND tab1.prijmeni = tab2.prijmeni
AND tab1.id != tab2.id
ORDER BY id
Výsledek bude vypadat nějak takto:

Z této tabulky jasně vidíme, které všechny "páry" řádků obsahují stejné duplicitní hodnoty založené na 2 sloupcích. Například 1-7, 1-4, 3- 6, 4-7, atd.
Další případy a řešení
Jistě existují další případy, kdy potřebujete nalézt duplicitní hodnoty v databázi MySQL... Možná znáte nějaká další a efektivnější postupy, budeme rádi, když nám napíšete komentář a my rádi článek rozšíříme...