Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 14609|Odpowiedź: 0

[Napiwki] SQL Jak zapytać tabelę, aby usunąć duplikaty

[Skopiuj link]
Opublikowano 09.10.2014 11:03:04 | | |

Zapytania SQL z pojedynczymi/wieloma tabelami usuwają duplikowane rekordy

Różnica pojedynczej tabeli

  1. 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!!






Poprzedni:SQL tworzy procedury przechowywane z parametrami
Następny:Czytnik EPUBReader, niezbędny do otwierania plików EPUB
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com