Heim > Datenbank > SQL > So entfernen Sie doppelte Abfragen in SQL

So entfernen Sie doppelte Abfragen in SQL

coldplay.xixi
Freigeben: 2020-10-10 11:37:29
Original
15970 Leute haben es durchsucht

SQL-Deduplizierungsabfragemethode: Doppelte Datensätze werden anhand einer einzelnen Feld-Personen-ID beurteilt und mithilfe von Anweisungen gelöscht. Der Code lautet [wobei Personen-ID aus der Personengruppe nach Personen-ID ausgewählt wird].

So entfernen Sie doppelte Abfragen in SQL

SQL-Deduplizierungsabfrage Methode:

SQL-Abfrage für eine einzelne Tabelle/mehrere Tabellen, um doppelte Datensätze zu entfernen

Einzelne Tabelle eindeutig

Mehrere Tabellen gruppieren nach

Gruppieren nach muss vor der Reihenfolge und dem Limit platziert werden, andernfalls wird ein Fehler gemeldet

1. Suchen Sie nach Überschüssen in der Tabelle. Doppelte Datensätze. Doppelte Datensätze werden anhand eines einzelnen Felds (peopleId) beurteilt.

select * from people
where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)
Nach dem Login kopieren
Datensatz mit der kleinsten Zeilen-ID

delete from people
where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)
Nach dem Login kopieren

3. Suchen Sie nach redundanten doppelten Datensätzen (mehrere Felder) in der Tabelle

select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)
Nach dem Login kopieren

4. Löschen Sie redundante doppelte Datensätze (mehrere Felder) in der Tabelle und lassen Sie nur den Datensatz mit der kleinsten Zeilen-ID übrig

delete from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
Nach dem Login kopieren

5. Suchen Sie nach redundanten Duplikaten in der Tabelle „Datensätze“ (mehrere Felder) und schließen Sie dabei den Datensatz mit der kleinsten Zeilen-ID aus.

Jetzt müssen wir die doppelten Elemente des „Name“-Werts zwischen den Datensätzen in der Tabelle überprüfen;

select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
Nach dem Login kopieren

Wenn wir auch überprüfen, ob das Geschlecht auch gleich ist , die Ergebnisse sind wie folgt:

Select Name,Count(*) From A Group By Name Having Count(*) > 1
Nach dem Login kopieren

(3)

Methode 1

Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
Nach dem Login kopieren

Methode 2

"Doppelte Datensätze haben zwei Bedeutungen: Eine ist ein vollständig duplizierter Datensatz, d. h. ein Datensatz, in dem alle Felder wiederholt werden. und das andere ist ein Datensatz, in dem einige Schlüsselfelder wiederholt werden, z. B. Namensfelder, aber andere Felder werden nicht unbedingt dupliziert oder können ignoriert werden

1 Bei der ersten Art der Duplizierung ist es einfacher. Verwenden Sie

declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
Nach dem Login kopieren

, um eine Ergebnismenge ohne doppelte Datensätze zu erhalten.

Wenn die Tabelle gelöscht werden muss. Doppelte Datensätze (ein doppelter Datensatz bleibt erhalten) können wie folgt gelöscht werden:

select distinct * from tableName
Nach dem Login kopieren

Der Grund für diese Duplizierung ist ein schlechtes Tabellendesign kann durch Hinzufügen einer eindeutigen Indexspalte gelöst werden

2. Diese Art von Duplikatsproblem wird normalerweise gelöst. Es ist erforderlich, den ersten Datensatz unter den doppelten Datensätzen beizubehalten. Die Vorgehensweise lautet wie folgt:

Angenommen, die doppelten Felder sind Name und Adresse, und es ist erforderlich, den eindeutigen Ergebnissatz dieser beiden Felder zu erhalten

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
Nach dem Login kopieren

Die letzte Auswahl ist Name und Adresse werden nicht wiederholt. Der Ergebnissatz (es gibt jedoch ein zusätzliches AutoID-Feld, Sie können diese Spalte in der Auswahl weglassen -Klausel beim tatsächlichen Schreiben)

(4)

Doppelte Abfrage

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
Nach dem Login kopieren

3. Suchen Sie nach redundanten doppelten Datensätzen in der Tabelle (mehrere Felder)

select * from tablename where id in (select id from tablename
group by id
having count(id) > 1
)
Nach dem Login kopieren
führt beim Ausführen zu Problemen, wenn Sie schreiben: where(a.peopleId,a. seq) wird nicht passieren! ! !

Verwandte Lernempfehlungen:

SQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo entfernen Sie doppelte Abfragen in SQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
sql
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage