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

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

青灯夜游
青灯夜游nach vorne
2019-11-25 18:37:302420Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich die Methoden zum Abfragen und Löschen doppelter Datensätze in MySQL vor und stellt sie Ihnen als Referenz und zum Studium zur Verfügung. Werfen wir einen Blick auf die detaillierte Einführung.

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

Alle Datensätze mit doppelten Titeln finden:

select title,count(*) as count from user_table group by title having count>1;
rrree

1. Doppelte Datensätze suchen

1. Alle doppelten Datensätze finden

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

2. Duplikate Datensätze filtern (nur einen anzeigen)

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

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

2. Löschen Sie doppelte Datensätze

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

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

2, behalten Sie einen Datensatz (das sollte das sein, was die meisten Leute brauchen^_^)

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

Hinweis: Bewahren Sie den Datensatz mit der größten ID hier auf

3. Beispiel

1. Die doppelten Datensätze werden anhand eines einzelnen Felds (peopleId) beurteilt.

Löschen Sie die Redundante doppelte Datensätze in der Tabelle, doppelte Datensätze werden anhand eines einzelnen Felds (peopleId) beurteilt und nur der Datensatz mit der kleinsten Zeilen-ID bleibt übrig

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

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


select * from people where peopleId in (select peopleId 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 den Datensatz mit der kleinsten Zeilen-ID übrig

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)

5. Suchen Sie nach den redundanten doppelten Datensätzen ( mehrere Felder) in der Tabelle, mit Ausnahme des Datensatzes mit der kleinsten Zeilen-ID. Datensatz

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

4. Ergänzung

hat mehr als zwei doppelte Datensätze. Einer ist ein vollständig doppelter Datensatz , das heißt, ein Datensatz, bei dem alle Felder wiederholt werden, und der andere ist ein teilweiser Datensatz mit wiederholten Schlüsselfeldern, wie z. B. wiederholten Namensfeldern, aber andere Felder dürfen nicht wiederholt werden oder können ignoriert werden.

1. Die erste Art der Duplizierung ist relativ einfach zu lösen. Verwenden Sie

rrree

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

Wenn die Tabelle doppelte Datensätze löschen muss (wobei 1 doppelter Datensatz erhalten bleibt), können Sie ihn wie folgt löschen

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)

Der Grund für diese Duplizierung ist ein schlechtes Tabellendesign. Das Hinzufügen einer eindeutigen Indexspalte kann erforderlich sein gelöst.

2. Diese Art von Duplizierungsproblem erfordert normalerweise die Beibehaltung des ersten Datensatzes unter den doppelten Datensätzen. Die Vorgehensweise ist wie folgt:

Gehen Sie davon aus, dass es doppelte Felder mit den Namen „Name“ und „Adresse“ gibt Erforderlich, um die Einzigartigkeit dieser beiden Felder zu erhalten

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)

Zusammenfassung

Das Obige ist der gesamte Inhalt dieses Artikels kann jedem beim Lernen oder bei der Arbeit helfen

Empfohlenes Lernen:

MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonEine vollständige Liste der Methoden zum Abfragen und Löschen doppelter Datensätze in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen