Heim >Datenbank >MySQL-Tutorial >So löschen Sie doppelte Zeilen in einer MySQL-Tabelle und behalten Datensätze mit kleineren (oder größeren) IDs
Wenn die Datenmenge im eigentlichen Prozess der Eingabe in die Datenbank relativ groß ist, ist es aus bestimmten Gründen unvermeidlich, dass mehrere doppelte Datensätze eingegeben werden. Wie können wir also die doppelten Zeilen löschen und eine mit einer größeren ID behalten? oder eine längere Platte? Was für eine kleine Platte.
Die in diesem Beispiel verwendete Datentabellenstruktur lautet wie folgt: tdb_goods
Die Daten in der Tabelle werden wie in der Abbildung gezeigt wiederholt
Der erste Schritt besteht zunächst darin, mithilfe von „Gruppieren nach“ den Inhalt mit einer Zahl größer als 2 (d. h. doppelte Datensätze) in jeder Gruppe zu ermitteln
mysql> SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING COUN T(goods_name)>=2; +----------+------------------------------+ | goods_id | goods_name | +----------+------------------------------+ | 20 | X3250 M4机架式服务器 2583i14 | | 19 | 商务双肩背包 | +----------+------------------------------+ 2 rows in set (0.01 sec)
Dann verwenden Sie LEFT JOIN, um die Originaltabelle mit den obigen Abfrageergebnissen zu verbinden, doppelte Datensätze zu löschen und Datensätze mit kleineren IDs beizubehalten
mysql> DELETE t1 FROM tdb_goods AS t1 LEFT JOIN( SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING COUNT(goods_name)>=2) AS t2 ON t1.goods_na me = t2.goods_name WHERE t1.goods_id>t2.goods_id; Query OK, 2 rows affected (0.06 sec)
Wie Aus der obigen Anweisung ist ersichtlich, dass die Bedingungen denselben Namen haben und dann alle Datensätze mit großer Waren-ID gelöscht werden. So können Sie den gewünschten Effekt erzielen.
Wenn Sie die größere ID behalten möchten, gilt das Gleiche wie folgt
mysql> DELETE t1 FROM tdb_goods AS t1 LEFT JOIN( SELECT max(goods_id) AS goods_i d,goods_name FROM tdb_goods GROUP BY goods_name HAVING COUNT(goods_name)>=2) AS t2 ON t1.goods_name = t2.goods_name WHERE t1.goods_id<t2.goods_id; Query OK, 2 rows affected (0.03 sec)
Wie MySQL doppelte Zeilen in der Tabelle löscht und Datensätze mit kleineren (oder größeren) IDs behält, achten Sie bitte auf PHP Chinesische Website (www.php.cn)!