Heim  >  Artikel  >  Datenbank  >  MySQL – Eine vollständige Liste von Methoden zum Abfragen doppelter Datensätze und zum Löschen doppelter Datensätze

MySQL – Eine vollständige Liste von Methoden zum Abfragen doppelter Datensätze und zum Löschen doppelter Datensätze

黄舟
黄舟Original
2017-01-21 13:21:17955Durchsuche

Suchen Sie alle Datensätze mit doppelten Titeln:

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

1. Suchen Sie nach doppelten Datensätzen

1. Suchen Sie nach doppelten Datensätzen (Es wird nur einer angezeigt)

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

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

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


2. Doppelte Datensätze löschen

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

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

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

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

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


3. Beispiele

1. Suchen Sie nach doppelten Datensätzen in der Tabelle basieren auf einem einzelnen Feld (peopleId) zur Beurteilung

2. Löschen Sie redundante doppelte Datensätze in der Tabelle. Doppelte Datensätze werden basierend auf einem einzelnen Feld (peopleId) beurteilt, sodass nur der Datensatz übrig bleibt kleinste Zeilen-ID

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, sodass nur rowid übrig bleibt. Der kleinste Datensatz

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

5. Die redundanten doppelten Datensätze (mehrere Felder) in der Nachschlagetabelle enthalten nicht den Datensatz mit der kleinsten rowid

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. Ergänzend

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)
Es gibt mehr als zwei doppelte Datensätze. Der erste ist ein vollständig doppelter Datensatz, d. h. ein Datensatz, in dem sich alle Felder wiederholen Beispielsweise wird das Feld „Name“ wiederholt, andere Felder werden jedoch möglicherweise nicht wiederholt oder alle werden vernachlässigt.

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 (einen doppelten Datensatz beibehalten), können Sie ihn wie folgt löschen:
select distinct * from tableName


Der Grund für diese Duplizierung ist ein schlechtes Tabellendesign. Es kann eine eindeutige Indexspalte hinzugefügt werden gelöst.

2. Diese Art von Duplizierungsproblem erfordert normalerweise die Beibehaltung des ersten Datensatzes unter den doppelten Datensätzen. Die Vorgehensweise ist wie folgt:
select distinct * into #Tmp from tableName  
drop table tableName  
select * into tableName from #Tmp  
drop table #Tmp
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 Inhalt von MySQL – eine vollständige Methode zum Abfragen doppelter Datensätze und zum Löschen doppelter Datensätze. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php .cn)!

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)

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