Heim  >  Artikel  >  Datenbank  >  Wie lösche ich doppelte Zeilen in einer MySQL-Tabelle, wenn die Zieltabelle in der FROM-Klausel enthalten ist?

Wie lösche ich doppelte Zeilen in einer MySQL-Tabelle, wenn die Zieltabelle in der FROM-Klausel enthalten ist?

DDD
DDDOriginal
2024-11-01 11:15:30281Durchsuche

How to Delete Duplicate Rows in a MySQL Table When the Target Table is in the FROM Clause?

Löschen doppelter Zeilen aus einer Tabelle in MySQL

Wenn Sie mit einer Tabelle arbeiten, die doppelte Datensätze enthält, ist es zur Datenpflege erforderlich, diese zu entfernen Integrität und Effizienz. In MySQL umfasst dies das Identifizieren und Löschen doppelter Zeilen, ein Vorgang, der durch spezifische Abfragen erreicht werden kann.

In Ihrem Fall haben Sie mithilfe dieser Abfrage bereits doppelte Datensätze basierend auf dem Feld empssn ermittelt:

SELECT COUNT(empssn), empssn FROM employee 
GROUP BY empssn 
HAVING COUNT(empssn) > 1

Um die doppelten Datensätze zu löschen, haben Sie versucht, die folgende Abfrage auszuführen:

DELETE FROM employee 
WHERE (empid, empssn) NOT IN (
    SELECT MIN(empid), empssn FROM employee 
    GROUP BY empssn
);

Es ist jedoch ein Fehler aufgetreten, da MySQL dies nicht tut Erlauben Sie, dass die Zieltabelle in der FROM-Klausel für eine Aktualisierungsabfrage angegeben wird.

Um dieses Problem zu lösen, besteht ein Ansatz darin, die Unterabfrage in eine abgeleitete Tabelle einzuschließen:

DELETE FROM employee 
WHERE (empid, empssn) NOT IN (
    SELECT empid, empssn FROM (
        SELECT MIN(empid) AS empid, empssn FROM employee 
        GROUP BY empssn
    ) X
);

Mithilfe von Mit dieser geänderten Abfrage erstellen Sie effektiv eine temporäre, abgeleitete Tabelle (X), die die erforderlichen Daten aus der Mitarbeitertabelle enthält. Die Hauptabfrage DELETE kann dann auf diese abgeleitete Tabelle verweisen, um die doppelten Zeilen basierend auf der eindeutigen Kombination von empid und empssn zu löschen. Dieser Ansatz sollte den aufgetretenen Fehler beheben und es Ihnen ermöglichen, die doppelten Datensätze erfolgreich zu löschen.

Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Zeilen in einer MySQL-Tabelle, wenn die Zieltabelle in der FROM-Klausel enthalten ist?. 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