Heim >Datenbank >MySQL-Tutorial >Wie lösche ich effizient Zeilen mit nicht eindeutigen IDs in MySQL 5.0?
MySQL-Abfrage zum Löschen nicht eindeutiger IDs korrigieren
Die bereitgestellte Abfrage ist in MySQL 5.0 nicht funktionsfähig. Dieser Artikel befasst sich mit diesem Problem und bietet alternative Lösungen zum Löschen von Zeilen mit nicht eindeutigen IDs in MySQL.
Ursprüngliches Problem:
DELETE FROM posts WHERE>
Erklärung:
Diese Abfrage versucht, Zeilen aus der Tabelle „posts“ zu löschen, in denen die „id“ mit der „id“ der Zeilen übereinstimmt tauchen mehrfach in der Tabelle auf. In MySQL 5.0 ist es jedoch nicht möglich, eine Unterabfrage als Bedingung in einer DELETE-Anweisung zu verwenden.
Lösungen:
1. Verwendung der IN-Klausel:
Anstatt „=" zu verwenden, ändern Sie die Bedingung in „IN", um die „id“ mit dem Ergebnissatz der Unterabfrage zu vergleichen.
DELETE FROM posts WHERE id IN ( SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) )
2. Trennen Sie SELECT- und DELETE-Abfragen:
Trennen Sie die Unterabfrage (SELECT-Anweisung) von der DELETE-Anweisung und führen Sie sie nacheinander aus.
SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) INTO @duplicate_ids; DELETE FROM posts WHERE id IN (@duplicate_ids);
3. Verschachtelte Unterabfrage mit Aliasing:
Verschachteln Sie die Unterabfrage und aliasen Sie das Ergebnis, das in der DELETE-Anweisung verwendet werden soll.
DELETE FROM posts WHERE id IN ( SELECT * FROM ( SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) ) AS p )
4. Verwenden von JOINs:
Verwenden Sie JOINs, um die „ID“ der Tabelle mit der Ergebnismenge der Unterabfrage zu vergleichen.
DELETE a.id FROM posts AS a JOIN ( SELECT id, COUNT(*) AS num FROM posts GROUP BY id HAVING num > 1 ) AS b ON a.id = b.id
Das obige ist der detaillierte Inhalt vonWie lösche ich effizient Zeilen mit nicht eindeutigen IDs in MySQL 5.0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!