Tento článek vysvětluje postup provádění aktivity mazání SQL pro duplicitní řádky z tabulky SQL.
Úvod
Při navrhování objektů na serveru SQL Server bychom měli dodržovat určité osvědčené postupy. Například tabulka by měla mít primární klíče, sloupce identity, seskupené a neseskupené indexy, omezení k zajištění integrity a výkonu dat. I my se řídíme osvědčenými postupy a můžeme čelit problémům, jako jsou duplicitní řádky. Mohli bychom také získat tato data v mezilehlých tabulkách v importu dat a chceme odstranit duplicitní řádky před skutečným vložením do produkčních tabulek.
Předpokládejme, že vaše tabulka SQL obsahuje duplicitní řádky a chcete tyto duplicitní řádky odstranit . Mnohokrát čelíme těmto problémům. Osvědčeným postupem je také použití příslušných klíčů, omezení k vyloučení možnosti duplicitních řádků, pokud však již máme duplicitní řádky v tabulce. Musíme vyčistit duplicitní data podle konkrétních metod. Tento článek zkoumá různé metody odstraňování duplicitních dat z tabulky SQL.
Vytvořme ukázkovou tabulku zaměstnanců a vložte do ní několik záznamů.
V tabulce máme několik duplicitních záznamů a musíme je odstranit.
SQL smaže duplicitní řádky pomocí Group By a s klauzulí
V této metodě použijeme k identifikaci duplikátu klauzuli SQL GROUP BY řádky. Klauzule Group By seskupuje data podle definovaných sloupců a můžeme použít funkci COUNT ke kontrole výskytu řádku.
Například proveďte následující dotaz a získáme ty záznamy, jejichž výskyt je větší než 1 v tabulce Zaměstnanec.
Ve výše uvedeném výstupu máme dva duplicitní záznamy s ID 1 a 3.
- Emp ID 1 má dva výskyty v tabulce zaměstnanců
- Emp ID 3 má tři výskyty v tabulce zaměstnanců
Vyžadujeme zachování jeden řádek a odstranit duplicitní řádky. Musíme z tabulky odstranit pouze duplicitní řádky. Například EmpID 1 se v tabulce objeví dvakrát. Chceme z toho odstranit pouze jeden výskyt.
Pomocí funkce SQL MAX vypočítáme maximální ID každého datového řádku.
Na následujícím snímku obrazovky vidíme, že výše uvedený příkaz Select vylučuje maximální ID každého duplicitního řádku a získáme pouze minimální hodnotu ID.
Chcete-li tato data odstranit, nahraďte first Vyberte pomocí příkazu SQL delete podle následujícího dotazu.
Jakmile spustíte příkaz mazání, proveďte výběr v tabulce zaměstnanců a my získáme následující záznamy, které neobsahují duplicitní řádky.
SQL odstraní duplicitní řádky pomocí Common Table Expressions (CTE)
K odstranění duplicitních řádků na serveru SQL Server můžeme použít Common Table Expressions běžně známé jako CTE. Je k dispozici od verze SQL Server 2005.
Používáme funkci SQL ROW_NUMBER a přidává jedinečné pořadové číslo řádku pro řádek.
V následujícím CTE rozděluje data pomocí klauzule PARTITION BY pro sloupec a a generuje číslo řádku pro každý řádek.
Pokud má některý řádek na výstupu hodnotu sloupce větší než 1, ukazuje, že se jedná o duplikát řádek.
Duplicitní řádky můžeme odstranit pomocí následujícího CTE.
Odstraní řádky s hodnotou větší než 1
Funkce RANK do SQL odstranit duplicitní řádky
Pomocí funkce SQL RANK můžeme také odstranit duplicitní řádky. Funkce SQL RANK poskytuje jedinečné ID řádku pro každý řádek bez ohledu na duplicitní řádek.
V následujícím dotazu použijeme funkci RANK s klauzulí PARTITION BY. Klauzule PARTITION BY připravuje podmnožinu dat pro zadané sloupce a dává hodnost pro tento oddíl.
Na snímku obrazovky můžete si všimnout, že musíme odstranit řádek s hodnocením větším než jeden. Odeberme tyto řádky pomocí následujícího dotazu.
Pomocí balíčku SSIS můžete SQL odstranit duplicitní řádky
Integrační služba serveru SQL poskytuje různé transformace, operátory, které pomáhají správcům i vývojářům při snižování manuálního úsilí a optimalizovat úkoly. Balíček SSIS může také odstranit duplicitní řádky z tabulky SQL.
K odstranění duplicitních řádků použijte operátor řazení v balíčku SSIS
K třídění hodnot v můžeme použít operátor řazení. tabulku SQL. Můžete se zeptat, jak může třídění dat odstranit duplicitní řádky?
Vytvořme balíček SSIS, který tuto úlohu zobrazí.
- V datových nástrojích serveru SQL Server vytvořte nový integrační balíček.V novém balíčku přidejte zdrojové připojení OLE DB
-
Otevřete editor zdroje OLE DB a nakonfigurujte zdrojové připojení a vyberte cílovou tabulku
-
Klikněte na Náhled dat a uvidíte, že ve zdrojové tabulce stále máme duplicitní data
-
Přidejte operátor řazení ze sady nástrojů SSIS pro operaci mazání SQL a spojte jej se zdrojovými daty
Chcete-li konfigurovat operátor řazení, dvakrát na něj klikněte a vyberte sloupce, které obsahují duplicitní hodnoty. V našem případě je duplicitní hodnota ve sloupcích,.
Pro sloupce můžeme také použít vzestupné nebo sestupné typy řazení. Výchozí metoda řazení je vzestupná. V pořadí řazení můžeme vybrat pořadí řazení sloupců. Pořadí řazení 1 zobrazuje sloupec, který bude seřazen jako první.
V levé dolní části si všimněte zaškrtávacího políčka Odebrat řádky pomocí duplicitní hodnoty řazení.
Bude to úkol odstranit nám duplicitní řádky ze zdrojových dat. Zaškrtneme toto políčko a klikneme na OK. Provádí aktivitu mazání SQL v balíčku SSIS.
Jakmile klikneme na OK, vrátí se na kartu datový tok, a můžeme vidět následující balíček SSIS.
Po přidání duplicitních řádků můžeme přidat cíle serveru SQL Server pro ukládání dat. Chceme pouze zkontrolovat, zda operátor řazení za nás dělá úkol nebo ne.
Přidejte transformaci vícesměrového vysílání SQL ze sady nástrojů SSIS, jak je uvedeno níže.
Chcete-li zobrazit odlišná data, klepněte pravým tlačítkem na konektor mezi možnostmi Třídění a Vícesměrové vysílání. Klikněte na Povolit prohlížeč dat.
Celkový balíček SSIS vypadá níže.
Spusťte balíček a proveďte operaci odstranění SQL. Otevře úlohu Seřadit výstupní data v úloze Tok dat. V tomto prohlížeči dat uvidíte po odebrání duplicitních hodnot odlišná data.
Zavřete toto a balíček SSIS se úspěšně zobrazí provedeno.
Závěr
V tomto článku jsme prozkoumali proces odstranění duplicitních řádků pomocí SQL pomocí různé způsoby, jako je balíček T-SQL, CTE a SSIS. Můžete použít metodu, ve které se budete cítit pohodlně. Navrhoval bych však neimplementovat tyto postupy a balíček na výrobní data přímo. Měli byste testovat v nižším prostředí.
- Autor
- Poslední příspěvky
Je tvůrcem jedné z největších bezplatných online sbírek článků na jedno téma se svou 50dílnou sérií věnovanou skupinám dostupnosti na serveru SQL Server. Na základě svého přínosu pro komunitu SQL Server byl oceněn různými oceněními, včetně prestižního ocenění „Nejlepší autor roku“ průběžně v letech 2020 a 2021 na serveru SQLShack.
Raj se vždy zajímá o nové výzvy, takže pokud potřebujete poradit pomoc s jakýmkoli tématem obsaženým v jeho spisech, lze ho kontaktovat na adrese [email protected]
Zobrazit všechny příspěvky od Rajendra Gupta
- Provádění drobných a hlavních upgradů verzí pro AWS RDS SQL Server – 29. ledna 2021
- Nasazení instancí AWS RDS PostgreSQL – 27. ledna 2021
- Migrace místních databází SQL na AWS RDS SQL Server pomocí AWS DMS – 25. ledna , 2021