|
SQL dotazy na jedno/více tabulek odstraňují duplicitní záznamy Jediná tabulka odlišná - 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!!
|