Heim >Datenbank >MySQL-Tutorial >Wie kann ich doppelte Datensätze effizient aus einer MySQL-Tabelle entfernen, ohne temporäre Tabellen zu verwenden?

Wie kann ich doppelte Datensätze effizient aus einer MySQL-Tabelle entfernen, ohne temporäre Tabellen zu verwenden?

Susan Sarandon
Susan SarandonOriginal
2025-01-04 03:46:401028Durchsuche

How Can I Efficiently Remove Duplicate Records from a MySQL Table Without Using Temporary Tables?

Effizientes Entfernen doppelter Datensätze in MySQL ohne temporäre Tabellen

Das Entdecken doppelter Datensätze in einer Datenbank kann eine Herausforderung sein, insbesondere ohne Primärschlüssel . Es gibt jedoch wirksame Techniken, um dieses Problem anzugehen.

In unserem Fall haben wir eine Tabelle namens TableA, die Benutzerantworten auf Fragebögen enthält. Aufgrund eines versehentlichen Fehlers haben einige Benutzer doppelte Antworten übermittelt. Unser Ziel ist es, diese Duplikate zu entfernen und gleichzeitig sicherzustellen, dass eine verbleibende Zeile bestehen bleibt.

Lösung 1: Eindeutiger Index

Ein Ansatz besteht darin, einen eindeutigen Index für die relevanten Spalten hinzuzufügen in TabelleA. Dadurch wird die Eindeutigkeit dieser Felder erzwungen und das Einfügen zusätzlicher Duplikate verhindert.

Um dies zu erreichen, führen Sie die folgende Abfrage aus:

ALTER IGNORE TABLE `TableA`   
ADD UNIQUE INDEX (`member_id`, `quiz_num`, `question_num`, `answer_num`);

Lösung 2: Primärschlüssel und Löschung

Alternativ können wir einen Primärschlüssel in der Tabelle erstellen und eine bestimmte Abfrage zum Identifizieren und Entfernen verwenden Duplikate.

Um einen Primärschlüssel zu erstellen, können wir diese Abfrage verwenden:

ALTER TABLE `TableA` ADD PRIMARY KEY (`member_id`, `quiz_num`, `question_num`, `answer_num`);

Sobald der Primärschlüssel vorhanden ist, können wir Duplikate mit dieser Abfrage löschen:

DELETE FROM member  
WHERE id IN (SELECT * 
             FROM (SELECT id FROM member 
                   GROUP BY member_id, quiz_num, question_num, answer_num HAVING (COUNT(*) > 1)
                  ) AS A
            );

Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Datensätze effizient aus einer MySQL-Tabelle entfernen, ohne temporäre Tabellen zu verwenden?. 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