Heim  >  Artikel  >  Datenbank  >  So löschen Sie doppelte Zeilen in einer MySQL-Tabelle und behalten Datensätze mit kleineren (oder größeren) IDs

So löschen Sie doppelte Zeilen in einer MySQL-Tabelle und behalten Datensätze mit kleineren (oder größeren) IDs

黄舟
黄舟Original
2017-02-27 13:09:271211Durchsuche

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)!


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