Maison > base de données > tutoriel mysql > Comment supprimer les lignes en double dans la table MySQL et conserver les enregistrements avec des ID plus petits (ou plus grands)

Comment supprimer les lignes en double dans la table MySQL et conserver les enregistrements avec des ID plus petits (ou plus grands)

黄舟
Libérer: 2017-02-27 13:09:27
original
1238 Les gens l'ont consulté

Dans le processus réel de saisie de la base de données, si la quantité de données est relativement importante, il est inévitable que plusieurs enregistrements en double soient saisis pour certaines raisons. Alors, comment devrions-nous supprimer les lignes en double et en conserver une avec un identifiant plus grand. ou un disque plus long ? Quel petit disque.

La structure du tableau de données utilisée dans cet exemple est la suivante tdb_goods

Les données du tableau sont répétées comme indiqué dans la figure


Tout d'abord, la première étape consiste à utiliser group by pour connaître le contenu avec un nombre supérieur à 2 (c'est-à-dire les enregistrements en double) dans chaque groupe


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)
Copier après la connexion


Utilisez ensuite LEFT JOIN pour connecter la table d'origine aux résultats de la requête ci-dessus, supprimez les enregistrements en double et conservez les enregistrements avec des identifiants plus petits

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)
Copier après la connexion

Comme Comme le montre l'instruction ci-dessus, les conditions sont celles du même nom, puis supprimez tous les enregistrements avec un grand Goods_id. De cette façon, vous pouvez obtenir l'effet souhaité.

Si vous souhaitez conserver l'identifiant le plus grand, il en va de même comme suit

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)
Copier après la connexion


Voici comment mysql supprime les lignes en double dans la table et conserve les enregistrements avec des identifiants plus petits (ou plus grands). Pour plus de contenu connexe, veuillez faire attention à PHP. Site chinois (www.php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal