Heim >Datenbank >MySQL-Tutorial >MySQL – Detaillierte Erläuterung der Methoden zum Abfragen/Löschen doppelter Datensätze

MySQL – Detaillierte Erläuterung der Methoden zum Abfragen/Löschen doppelter Datensätze

黄舟
黄舟Original
2017-03-13 13:34:161601Durchsuche

Alle Datensätze mit doppelten Titeln suchen:

SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC

1. Doppelte Datensätze suchen

1. Alle doppelten Datensätze suchen

Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

2. Filtern Sie doppelte Datensätze (nur einer wird angezeigt)

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

Hinweis: Der Datensatz mit der größten ID wird hier angezeigt

2. LöschenDoppelte Datensätze

1. Löschen Sie alle doppelten Datensätze (mit Vorsicht verwenden)

Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

2. Behalten Sie einen (das sollte die meisten Leute brauchen^_^)

Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

Hinweis: Der Datensatz mit der größten ID wird hier beibehalten

3. Die doppelten Datensätze in der Tabelle werden anhand eines einzelnen Felds beurteilt. peopleId)


2. Löschen Sie redundante doppelte Datensätze in der Tabelle. Doppelte Datensätze werden anhand eines einzelnen Felds (peopleId) beurteilt, wobei nur der Datensatz mit der kleinsten Zeilen-ID übrig bleibt
select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)


3 , Suchen Sie nach redundanten doppelten Datensätzen (mehrere Felder) in der Tabelle
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)


4. Löschen Sie redundante doppelte Datensätze (mehrere Felder) in der Tabelle und lassen Sie nur die übrig Datensatz mit der kleinsten Zeilen-ID
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

5. Redundante doppelte Datensätze (mehrere Felder) in der Nachschlagetabelle, mit Ausnahme des Datensatzes mit der kleinsten Zeilen-ID

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)

4

Es gibt mehr als zwei doppelte Datensätze, darunter: erstens vollständig doppelte Datensätze, d. h. Datensätze, in denen alle Felder wiederholt werden; zweitens Datensätze, in denen einige Schlüsselfelder wiederholt werden, z nicht unbedingt wiederholt oder kann ignoriert werden.
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)
1. Die erste Art der Duplizierung ist relativ einfach zu lösen. Verwenden Sie

, um eine Ergebnismenge ohne doppelte Datensätze zu erhalten.
Wenn die Tabelle doppelte Datensätze löschen muss (ein doppelter Datensatz bleibt erhalten), können Sie ihn wie folgt löschen

select distinct * from tableName


Der Grund für diese Duplizierung ist ein schlechtes Tabellendesign. Dies kann sein gelöst durch Hinzufügen einer eindeutigen Spalte
index

.
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
2. Diese Art von Duplizierungsproblem erfordert normalerweise die Beibehaltung des ersten Datensatzes unter den doppelten Datensätzen. Die Vorgehensweise ist wie folgt:

Angenommen, es gibt doppelte Felder wie Name und Adresse, und es ist erforderlich, den eindeutigen Ergebnissatz zu erhalten dieser beiden Felder

Das obige ist der detaillierte Inhalt vonMySQL – Detaillierte Erläuterung der Methoden zum Abfragen/Löschen doppelter Datensätze. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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