kzen.dev
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
 Seibar
Seibar
Question

Ako môžem odstrániť duplicitné riadky?

Aký je najlepší spôsob odstránenia duplicitných riadkov z pomerne veľkej tabuľky SQL Servera (t. j. viac ako 300 000 riadkov)?

Riadky samozrejme nebudú dokonalé duplikáty, pretože existuje identifikačné pole RowID.

MyTable

RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null
1250 2008-08-20T21:51:29+00:00 3
 DineshDB
DineshDB
Edited question 28 marec 2018 в 10:48
Programovanie
sql-server
tsql
duplicates
Popular videos
Ako vyznačiť a odstrániť duplicitné hodnoty v Exceli
Ako vyznačiť a odstrániť duplicitné hodnoty v Exceli
pred 4 rokmi
Excel - Medzisúčty - Ako nastaviť farbu pre medzisúčtové riadky
Excel - Medzisúčty - Ako nastaviť farbu pre medzisúčtové riadky
pred 2 rokmi
#42 Excel - Pokročilé ukotvenie buniek / vzorcov - riadky a stĺpce
#42 Excel - Pokročilé ukotvenie buniek / vzorcov - riadky a stĺpce
pred 4 rokmi
Online Kurz Excel - Kontingenčné Tabuľky - Ukážka - Hárky, Duplicity, Radenie, Funkcie, Agregácia
Online Kurz Excel - Kontingenčné Tabuľky - Ukážka - Hárky, Duplicity, Radenie, Funkcie, Agregácia
pred 2 rokmi
Excel - Duplicity - Ako v Exceli nájsť duplicity a ako ich zobraziť?
Excel - Duplicity - Ako v Exceli nájsť duplicity a ako ich zobraziť?
pred 2 rokmi
Excel – Otázky a odpovede - Ako spraviť v tabuľke prieniky stĺpcov a riadkov cez pole názvov
Excel – Otázky a odpovede - Ako spraviť v tabuľke prieniky stĺpcov a riadkov cez pole názvov
pred 5 rokmi
Excel - Komentáre - kompletná práca s nimi : Ako ich vytvoriť, upraviť, odstrániť a formátovať
Excel - Komentáre - kompletná práca s nimi : Ako ich vytvoriť, upraviť, odstrániť a formátovať
pred 6 rokmi
Excel - Medzisúčty - Ako ich vytvoriť? Ako fungujú a kedy ich použiť?
Excel - Medzisúčty - Ako ich vytvoriť? Ako fungujú a kedy ich použiť?
pred 2 rokmi
Excel - Duplicity - Koľko mám v tabuľke duplicít? Ako to zistiť
Excel - Duplicity - Koľko mám v tabuľke duplicít? Ako to zistiť
pred 2 rokmi
Excel - Kontingenčné tabuľky - Čo to je a kedy ich používať?
Excel - Kontingenčné tabuľky - Čo to je a kedy ich používať?
pred 6 rokmi
Excel - funkcia SUM vs. funkcia SUBTOTAL - súčtové riadky?
Excel - funkcia SUM vs. funkcia SUBTOTAL - súčtové riadky?
pred 5 rokmi
Excel - Ako v Exceli ukotviť hlavičku a stĺpec cez ukotvenie priečok
Excel - Ako v Exceli ukotviť hlavičku a stĺpec cez ukotvenie priečok
pred 6 rokmi
Excel - Podmienené formátovanie - Ako označiť celý riadok alebo stĺpec
Excel - Podmienené formátovanie - Ako označiť celý riadok alebo stĺpec
pred 4 rokmi
Excel - Rozšírený filter - Ako v Exceli používať rozšírený filter a jeho kritériá
Excel - Rozšírený filter - Ako v Exceli používať rozšírený filter a jeho kritériá
pred 4 rokmi
Ako transponovať tabuľku v Exceli
Ako transponovať tabuľku v Exceli
pred 4 rokmi
« Predchádzajúci
Ďalšie »
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
Mark Brackett
Mark Brackett
20 august 2008 в 10:00
2008-08-20T22:00:00+00:00
Viac na
Zdroj
Upraviť
#8420661

Za predpokladu, že nie sú žiadne nuly, môžete ZHROMAŽĎOVAŤ podľa jedinečných stĺpcov a VYBRAŤ MIN (alebo MAX) RowId ako riadok, ktorý sa má zachovať. Potom jednoducho odstráňte všetko, čo nemalo id riadku:

DELETE FROM MyTable
LEFT OUTER JOIN (
   SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
   FROM MyTable 
   GROUP BY Col1, Col2, Col3
) as KeepRows ON
   MyTable.RowId = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL

V prípade, že máte namiesto celého čísla GUID, môžete nahradiť

MIN(RowId)

pomocou

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))
 Srini
Srini
Edited answer 12 jún 2017 в 11:06
1124
0
Jon Galloway
Jon Galloway
20 august 2008 в 9:53
2008-08-20T21:53:14+00:00
Viac na
Zdroj
Upraviť
#8420659

Na stránke podpory spoločnosti Microsoft nájdete dobrý článok o odstraňovaní duplikátov. Je dosť konzervatívny - všetko máte robiť v samostatných krokoch - ale mal by dobre fungovať proti veľkým tabuľkám.

V minulosti som na to používal self-joins, hoci by sa to pravdepodobne dalo vylepšiť klauzulou HAVING:

DELETE dupes
FROM MyTable dupes, MyTable fullTable
WHERE dupes.dupField = fullTable.dupField 
AND dupes.secondDupField = fullTable.secondDupField 
AND dupes.uniqueField > fullTable.uniqueField
Ivan Yurchenko
Ivan Yurchenko
Edited answer 19 jún 2017 в 11:36
Remove duplicate rows from a table in SQL Server - SQL Server | Microsoft Learn
This article provides a script that you can use to remove duplicate rows from a SQL Server table.
support.microsoft.com
146
0
 Craig
Craig
20 august 2008 в 9:58
2008-08-20T21:58:00+00:00
Viac na
Zdroj
Upraviť
#8420660

Tu je ďalší dobrý článok o odstraňovaní duplikátov.

Rozoberá, prečo je to ťažké: "SQL je založená na relačnej algebre a duplikáty sa v relačnej algebre nemôžu vyskytovať, pretože duplikáty nie sú v množine povolené."

Riešenie dočasnej tabuľky a dva príklady mysql.

V budúcnosti sa tomu chystáte zabrániť na úrovni databázy, alebo z pohľadu aplikácie. Navrhoval by som databázovú úroveň, pretože vaša databáza by mala byť zodpovedná za udržiavanie referenčnej integrity, vývojári len spôsobia problémy ;)

12
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
bran Bran
Registered pred 11 hodinami
2
Олечка Арапова
Registered pred 17 hodinami
3
Роман Азаров
Registered pred týždňom
4
Mansur Zakirov
Registered pred týždňom
5
Тагир Мамедов
Registered pred 2 týždňami
DA
DE
EL
ES
FI
FR
ID
IT
JA
NL
PT
SK
SL
SV
TR
ZH
© kzen.dev 2023
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora