Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 14609|Odpověď: 0

[Tipy] SQL Jak dotazovat tabulku pro odstranění duplicit

[Kopírovat odkaz]
Zveřejněno 09.10.2014 11:03:04 | | |

SQL dotazy na jedno/více tabulek odstraňují duplicitní záznamy

Jediná tabulka odlišná

  1. select distinct 字段 from 表
Kopírovat kód

Mnoho hlasů je seskupeno podle

Skupina podle musí být umístěna před pořadí a limit, jinak bude hlášena chyba

************************************************************************************

1. Najděte redundantní duplicitní záznamy v tabulce a duplicitní záznamy jsou hodnoceny na základě jednoho pole (peopleId).

Vyberte * z lidí
kde peopleId in (vyberte peopleId ze skupiny lidí podle peopleId s count(peopleId) > 1)

2. Smažte redundantní duplicitní záznamy v tabulce a duplicitní záznamy jsou hodnoceny podle jednoho pole (peopleId), přičemž zůstanou pouze záznamy s nejmenším rowid
Smazat z lidí
kde peopleId in (vyberte peopleId ze skupiny lidí podle peopleId s count(peopleId) > 1)
a rowid není v (vyberte min(rowid) ze skupiny lidí podle peopleId s count(peopleId )>1)

3. Najděte redundantní duplicitní záznamy (více polí) v tabulce
Vyberte * z vitae a
kde (a.peopleId,a.seq) v (vyberte peopleId,seq ze skupiny vitae podle peopleId,seq s count(*) > 1)

4. Smazat redundantní duplicitní záznamy (více polí) v tabulce, přičemž zůstanou pouze záznamy s nejmenším rowidem.
Delete from Vitae A
kde (a.peopleId,a.seq) v (vyberte peopleId,seq ze skupiny vitae podle peopleId,seq s count(*) > 1)
a rowid není v (vyberte min(rowid) ze skupiny vitae podle peopleId,seq s count(*)>1)


5. Najděte v tabulce redundantní duplicitní záznamy (více polí) a neobsahují záznamy s nejmenším rowidem.
Vyberte * z vitae a
kde (a.peopleId,a.seq) v (vyberte peopleId,seq ze skupiny vitae podle peopleId,seq s count(*) > 1)
a rowid není v (vyberte min(rowid) ze skupiny vitae podle peopleId,seq s count(*)>1)

(dva)
Například
V tabulce A je pole "jméno",
A hodnota "názvu" může být stejná mezi různými záznamy,
Nyní musíte dotazovat položky s duplicitními "názvy" mezi záznamy v tabulce;
Vyberte jméno,count(*) ze skupiny podle jména s count(*) > 1

Pokud je pohlaví stejné, je to následující:
Vyberte jméno, pohlaví, počet(*) ze skupiny podle jména, pohlaví s počtem (*) > 1

(tři)
Metoda 1

declare @max celé číslo,@id celé číslo

deklarujte cur_rows kurzor lokální pro vybrané hlavní pole, count(*) z skupiny názvů tabulky podle hlavního pole s count(*) >; 1

Otevři cur_rows

Přines cur_rows do @id,@max

zatímco @@fetch_status=0

začátek

select @max = @max -1

Nastavte počet řádků @max

delete from table name where primary field = @id

Přines cur_rows do @id,@max
konec

Blízké cur_rows

Nastavte počet řádků 0

Metoda 2

"Duplicitní záznamy" mají dva významy duplicitních záznamů: jeden je zcela duplicitní záznam, tedy záznam se všemi poli zdvojenými, a druhý je záznam s duplicitními částmi klíčových polí, například pole Název je duplikované, zatímco jiná pole nemusí být nutně duplikována nebo je lze ignorovat.

1. U prvního typu opakování je relativně snadné jej vyřešit a použít

vyber distinct * from tableName

Můžete získat výsledek bez duplicitních záznamů.

Pokud potřebujete smazat duplicitní záznamy (ponechat si jeden duplicitní záznam), můžete je smazat následovně

vyberte distinct * do #Tmp z tableName

tabulka drop table Název

vyberte * do tableName z #Tmp
Drop table #Tmp

Tato duplikace vzniká kvůli špatnému návrhu tabulky a lze ji vyřešit přidáním unikátních indexových sloupců.

2. Tento typ duplikátního problému obvykle vyžaduje uchování prvního záznamu v duplikátním záznamu a metoda operace je následující

Předpokládejme, že existují duplicitní pole Name a Address a potřebujete získat unikátní sadu výsledků pro tato dvě pole

vyberte identitu(int,1,1) jako autoID, * do #Tmp z tableName

vyberte min(autoID) jako autoID do #Tmp2 ze skupiny #Tmp podle Name,autoID

Vyberte * z #Tmp, kde je autoID (vyberte autoID z #tmp2)

Poslední výběr získá výslednou sadu Jméno a Adresa, které se neopakují (ale existuje další pole autoID, které lze zapsat do klauzule select při samotném zápisu)

(4)
Dotazy jsou duplikovány

Vyberte * z názvu tabulky, kde id v (vyberte ID z názvu tabulky)

Skupina podle ID

s count(id) > 1

)

3. Najděte redundantní duplicitní záznamy (více polí) v tabulce
Vyberte * z vitae a
kde (a.peopleId,a.seq) v (vyberte peopleId,seq ze skupiny vitae podle peopleId,seq s count(*) > 1)

Běhání způsobuje problémy a psaní a posílání typu where (a.peopleId, a.seq) nefunguje!!






Předchozí:SQL vytváří uložené procedury s parametry
Další:EPUBReader čtečka, nezbytná pro otevírání EPUB souborů
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com