Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 14609|Odpoveď: 0

[Tipy] SQL Ako dotazovať tabuľku na odstránenie duplicít

[Kopírovať odkaz]
Zverejnené 9. 10. 2014 11:03:04 | | |

SQL jedno- alebo viactabuľkové dotazy odstraňujú duplicitné záznamy

Jedna tabuľka rozlíšená

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

Mnohé hlasy sú zoskupené podľa

Skupina podľa musí byť umiestnená pred Order by a Limit, inak bude nahlásená chyba

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

1. Nájdite redundantné duplicitné záznamy v tabuľke a duplicitné záznamy sa hodnotia na základe jedného poľa (peopleId).

Vyberte * z ľudí
kde peopleId v (vyberte peopleId zo skupiny ľudí podľa peopleId s count(peopleId) > 1)

2. Vymažte redundantné duplicitné záznamy v tabuľke a duplicitné záznamy sa hodnotia na základe jedného poľa (peopleId), pričom zostanú len záznamy s najmenším rowidom
vymazať z ľudí
kde peopleId v (vyberte peopleId zo skupiny ľudí podľa peopleId s count(peopleId) > 1)
a rowid nie v (vyberte min(rowid) zo skupiny ľudí podľa peopleId s count(peopleId )>1)

3. Nájdite redundantné duplicitné záznamy (viacero polí) v tabuľke
Vyberte * z vitae a
kde (a.peopleId,a.seq) v (vyberte peopleId,seq zo skupiny vitae podľa peopleId,seq s count(*) > 1)

4. Vymazať redundantné duplicitné záznamy (viacero polí) v tabuľke, pričom zostanú len záznamy s najmenším rowidom
Delete from Vitae A
kde (a.peopleId,a.seq) v (vyberte peopleId,seq zo skupiny vitae podľa peopleId,seq s count(*) > 1)
a rowid nie v (vyberte min(rowid) zo skupiny vitae podľa peopleId,seq s count(*)>1)


5. Nájdite redundantné duplicitné záznamy (viacero polí) v tabuľke a neobsahujú záznamy s najmenším rowidom
Vyberte * z vitae a
kde (a.peopleId,a.seq) v (vyberte peopleId,seq zo skupiny vitae podľa peopleId,seq s count(*) > 1)
a rowid nie v (vyberte min(rowid) zo skupiny vitae podľa peopleId,seq s count(*)>1)

(dva)
Napríklad
V tabuľke A je pole "name",
A hodnota "názvu" môže byť rovnaká medzi rôznymi záznamami,
Teraz musíte vyhľadávať položky s duplicitnými hodnotami "názvu" medzi záznamami v tabuľke;
Vyberte meno,count(*) zo skupiny podľa mena s count(*) > 1

Ak je rod rovnaký, je to nasledovné:
Vyberte meno, pohlavie, počet(*) zo skupiny podľa mena, pohlavie s počtom(*) > 1

(tri)
Metóda 1

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

deklarujte cur_rows kurzor lokálne pre vybrané hlavné pole, count(*) z skupiny názvov tabuľky podľa hlavného poľa s count(*) >; 1

Otvorte cur_rows

Prines cur_rows do @id,@max

zatiaľ čo @@fetch_status=0

začať.

select @max = @max -1

Nastavte počet riadkov @max

delete z názvu tabuľky, kde primárne pole = @id

Prines cur_rows do @id,@max
koniec

Blízko cur_rows

nastaviť počet riadkov 0

Metóda 2

"Duplicitné záznamy" majú dva významy duplicitných záznamov: jeden je úplne duplicitný záznam, teda záznam so všetkými poliami duplikovanými, a druhý je záznam s duplicitnými časťami kľúčových polí, napríklad pole Názov je duplikované, zatiaľ čo ostatné polia nie sú nutne duplikované alebo môžu byť ignorované.

1. Pri prvom type opakovania je relatívne jednoduché ho vyriešiť a použiť

vyber odlišné * z tableName

Výsledok môžete získať bez duplicitných záznamov.

Ak potrebujete vymazať duplicitné záznamy (ponechať si jeden duplicitný záznam), môžete ich vymazať nasledovne

vyber distinct * do #Tmp z tableName

tabuľka drop table Názov

vyberte * do tableName z #Tmp
Drop table #Tmp

Táto duplikácia nastáva kvôli zlému dizajnu tabuľky a dá sa vyriešiť pridaním unikátnych indexových stĺpcov.

2. Tento typ problému s duplikátmi zvyčajne vyžaduje uchovávanie prvého záznamu v duplicitnom zázname a metóda je nasledovná

Predpokladajme, že existujú duplicitné polia Meno a Adresa a potrebujete získať jedinečnú množinu výsledkov pre tieto dve polia

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

vyberte min(autoID) ako autoID do #Tmp2 zo skupiny #Tmp podľa Name,autoID

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

Posledný výber získa množinu výsledkov Meno a Adresa, ktoré sa neopakujú (ale existuje ďalšie pole autoID, ktoré je možné zapísať do klauzuly select pri samotnom zápise)

(4)
Dotazy sa duplikujú

Vyberte * z názvu tabuľky, kde id v (vyberte id z názvu tabuľky)

Skupina podľa ID

s count(id) > 1

)

3. Nájdite redundantné duplicitné záznamy (viacero polí) v tabuľke
Vyberte * z vitae a
kde (a.peopleId,a.seq) v (vyberte peopleId,seq zo skupiny vitae podľa peopleId,seq s count(*) > 1)

Behanie spôsobuje problémy a písanie a odosielanie typu where(a.peopleId, a.seq) nebude fungovať!!






Predchádzajúci:SQL vytvára uložené procedúry s parametrami
Budúci:EPUBReader čítačka, nevyhnutná na otváranie EPUB súborov
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com