|
SQL jedno- alebo viactabuľkové dotazy odstraňujú duplicitné záznamy Jedna tabuľka rozlíšená - 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ť!!
|