Heim >Datenbank >MySQL-Tutorial >MySQL – Eine vollständige Liste von Methoden zum Abfragen doppelter Datensätze und zum Löschen doppelter Datensätze
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
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
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.
select distinct * from tableName
Der Grund für diese Duplizierung ist ein schlechtes Tabellendesign. Es kann eine eindeutige Indexspalte hinzugefügt werden gelöst.
select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #TmpAngenommen, 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)