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].
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)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)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)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)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)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(3) Methode 1
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1Methode 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, 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 tableNameDer 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 #TmpDie 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)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 )führt beim Ausführen zu Problemen, wenn Sie schreiben: where(a.peopleId,a. seq) wird nicht passieren! ! !
Verwandte Lernempfehlungen:
SQL-Video-TutorialDas 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!