|
Zapytania SQL z pojedynczymi/wieloma tabelami usuwają duplikowane rekordy Różnica pojedynczej tabeli - select distinct 字段 from 表
Skopiuj kod
Wiele głosów jest grupowanych według grupowanie przez musi być umieszczone przed zamówieniem i limitem, w przeciwnym razie zostanie zgłoszony błąd ************************************************************************************ 1. Znajdź zbędne zduplikowane rekordy w tabeli, a duplikaty są oceniane na podstawie jednego pola (peopleId). Wybierz * spośród osób gdzie peopleId in (wybierz peopleId z grupy ludzi według peopleId posiadających count(peopleId) > 1) 2. Usuń redundantne zduplikowane rekordy w tabeli, a te podwójne rekordy są oceniane na podstawie jednego pola (peopleId), pozostawiając tylko rekordy z najmniejszym rowid usuń z ludzi gdzie peopleId in (wybierz peopleId z grupy ludzi według peopleId posiadających count(peopleId) > 1) oraz rowid nie w (wybierz min(rowid) z grupy osób według peopleId posiadających count(peopleId )>1) 3. Znajdź redundantne duplikaty rekordów (wiele pól) w tabeli Wybierz * z Vitae A gdzie (a.peopleId,a.seq) w (wybierz peopleId,seq z grupy vitae przez peopleId,seq mające count(*) > 1) 4. Usuń redundantne zduplikowane rekordy (wiele pól) w tabeli, pozostawiając tylko rekordy z najmniejszym rowid Usuń z Vitae A gdzie (a.peopleId,a.seq) w (wybierz peopleId,seq z grupy vitae przez peopleId,seq mające count(*) > 1) oraz rowid niewłączony do (wybierz min(rowid) z grupy vitae przez peopleId,seq mające count(*)>1) 5. Znajdź redundantne duplikaty rekordów (wiele pól) w tabeli i nie zawieraj rekordów z najmniejszym rowid Wybierz * z Vitae A gdzie (a.peopleId,a.seq) w (wybierz peopleId,seq z grupy vitae przez peopleId,seq mające count(*) > 1) oraz rowid niewłączony do (wybierz min(rowid) z grupy vitae przez peopleId,seq mające count(*)>1)
(dwa) Na przykład W tabeli A znajduje się pole "nazwa", A wartość "nazwy" może być taka sama między różnymi rekordami, Teraz musisz zapytać o elementy z duplikatami wartości "nazwy" między rekordami w tabeli; Wybierz nazwę,count(*) z grupy według nazwy z count(*) > 1 Jeśli płeć jest również taka sama, wygląda to następująco: Wybierz imię, płeć, liczbę(*) z grupy według imienia, liczba płci z liczbą (*) > 1 (trzy) Metoda 1 deklaruj @max liczbę całkowitą, @id całkowitą zadeklaruj cur_rows kursor lokalny dla wybranego pola głównego, count(*) z grupy nazw tabeli według pola głównego o count(*) >; 1 Otwórz cur_rows Przynieś cur_rows do @id@max podczas gdy @@fetch_status=0 zaczynaj wybierz @max = @max -1 ustaw liczbę wierszy @max usuń z nazwy tabeli, gdzie pole główne = @id Przynieś cur_rows do @id@max koniec Close cur_rows ustaw liczbę wierszy 0 Metoda 2 "Rekordy duplikaty" mają dwa znaczenia zduplikowanych rekordów: jedno to całkowicie duplikowany rekord, czyli rekord z podwójnymi polami wszystkimi polami, a drugie to rekord z duplikowanymi częściami kluczowych pól, na przykład pole Nazwa jest zdublowane, podczas gdy inne pola niekoniecznie są zdublowane lub można je zignorować. 1. Dla pierwszego typu powtórzenia jest stosunkowo łatwy do rozwiązania i zastosowania wybierz odrębne * z tableName Możesz uzyskać zestaw wyników bez duplikatów rekordów. Jeśli musisz usunąć zduplikowane rekordy (zachować jeden duplikat), możesz je usunąć w następujący sposób wybierz distinct * do #Tmp z tableName tabela tabeli drop table Nazwa wybierz * do tableName z #Tmp Tabela drop #Tmp To duplikowanie wynika z błędnego projektu tabeli i można rozwiązać, dodając unikalne kolumny indeksowe. 2. Tego typu problem duplikatów zwykle wymaga zachowania pierwszego rekordu w rekordzie duplikatu, a metoda działania jest następująca Załóżmy, że istnieją zduplikowane pola Name i Address i musisz uzyskać unikalny zestaw wyników dla tych dwóch pól wybierz identyfikator(int,1,1) jako autoID, * do #Tmp z tableName wybierz min(autoID) jako autoID do #Tmp2 z grupy #Tmp według Name,autoID Wybierz * z #Tmp gdzie znajduje się autoID (wybierz autoID z #tmp2) Ostatni wybór otrzymuje zestaw wyników Imię i Adres, które nie są powtarzane (ale istnieje dodatkowe pole autoID, które można zapisać w klauzuli select podczas faktycznego zapisu) (4) Zapytania są powielane Wybierz * z nazwy tabeli gdzie id w (wybierz ID z nazwy tabeli Grupa według id posiadającej count(id) > 1 ) 3. Znajdź redundantne duplikaty rekordów (wiele pól) w tabeli Wybierz * z Vitae A gdzie (a.peopleId,a.seq) w (wybierz peopleId,seq z grupy vitae przez peopleId,seq mające count(*) > 1) Uruchamianie powoduje problemy, a pisanie i wysyłanie typu where(a.peopleId, a.seq) nie zadziała!!
|