sql >> Databáze >  >> RDS >> Database

Jak najít duplicitní řádky v SQL?

Problém:

V tabulce máte duplicitní řádky, přičemž pouze ID jsou jedinečná. Jak najdete tyto duplicitní záznamy?

Příklad:

Naše databáze obsahuje tabulku s názvem product s údaji v následujících sloupcích:id , name a category .

id jméno kategorie
1 steak maso
2 dort sladkosti
3 d>steak maso
4 vepřové maso
5 dort sladkosti
6 dort sladkosti

Pojďme najít duplicitní názvy a kategorie produktů. Duplikáty můžete najít seskupením řádků pomocí COUNT agregační funkce a určení HAVING klauzule, pomocí které lze filtrovat řádky.

Řešení:

SELECT  name,
 category,
FROM product
GROUP BY name, category
HAVING COUNT(id) >1;

Tento dotaz vrací pouze duplicitní záznamy – ty, které mají stejný název produktu a kategorii:

name kategorie
steak maso
dort sladkosti

V naší tabulce jsou dva duplicitní produkty:steak z kategorie maso a koláč z kategorie sladkosti. První produkt se v tabulce opakuje dvakrát, zatímco druhý se objeví třikrát.

Diskuse:

Chcete-li vybrat duplicitní hodnoty, musíte vytvořit skupiny řádků se stejnými hodnotami a poté vybrat skupiny s počty větším než jedna. Můžete toho dosáhnout pomocí GROUP BY a HAVING doložka.

Prvním krokem je vytvoření skupin záznamů se stejnými hodnotami ve všech sloupcích bez ID (v našem příkladu name a category ). To provedete pomocí GROUP BY doložka. Po GROUP BY klíčové slovo, zadáte názvy sloupců, které chcete použít pro seskupení. Vylučujeme id sloupec, protože je to primární klíč naší tabulky; podle definice bude mít každý řádek pod tímto sloupcem jinou hodnotu. Pokud bychom to zahrnuli, pak bychom nebyli schopni detekovat duplikáty!

Chceme najít skupiny s více než jedním řádkem; takové skupiny musí podle definice obsahovat duplikát, pokud jsme seskupili do správných sloupců. K tomu používáme HAVING doložka. Podmínkou, kterou zadáváme, je, že počet prvků ve skupině — COUNT(id) —musí být větší než jedna:COUNT(id) > 1 . Pamatujte, že HAVING umožňuje filtrovat skupiny; WHERE slouží k filtrování jednotlivých řádků.


  1. SQL Server – zahrňte NULL pomocí UNPIVOT

  2. PLSQL Vložit do s poddotazem a návratovou klauzulí

  3. jsonb vs jsonb[] pro více adres pro zákazníka

  4. 32bitový Excel a 64bitový SQL Server