Maison > base de données > tutoriel mysql > le corps du texte

Expliquez comment MySQL supprime les données en double

藏色散人
Libérer: 2022-01-23 09:17:30
avant
10493 Les gens l'ont consulté

Cet article vous présentera comment supprimer les données en double dans MySQL. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

sku doit avoir un sku_id correspondant à une donnée de poids unique. En raison d'une erreur de programme, les mêmes données redondantes apparaissent. N’en conserver qu’un et supprimer les autres.

Champ Description
id Auto-incrémentation
sku_id identification sku_id
poids Poids

En supposant le nom de la table : poids

Interrogez la liste avec les données en double

SELECT sku_id,COUNT(id) FROM weight GROUP BY sku_id HAVING COUNT(sku_id) > 1
Copier après la connexion

Interrogez chaque plus petit identifiant dans les données en double

SELECT min(id) FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1
Copier après la connexion

Interrogez d'autres données avec le plus petit identifiant qui supprime les données en double

SELECT id,sku_id FROM weight WHERE sku_id IN(
    SELECT sku_id FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1)AND id NOT IN(
    SELECT MIN(id) FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1)
Copier après la connexion

Supprimez les autres données avec le plus petit id qui supprime les données en double Data

DELETE FROM weight WHERE sku_id IN(
    SELECT sku_id FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1)AND id NOT IN(
    SELECT MIN(id) FROM weight   GROUP BY sku_id HAVING COUNT(sku_id) > 1)
Copier après la connexion

La raison est la suivante : lors de la suppression de cette table, cette table est interrogée en même temps, et pendant que cette table est interrogée, cette table est supprimée en même temps, ce qui peut être compris comme un impasse. MySQL ne prend pas en charge cette opération de suppression et d'interrogation de la même table

错误代码: 1093You can't specify target table 'weight' for update in FROM clause
Copier après la connexion

La solution est la suivante : interrogez les données à supprimer en tant que table tierce, puis filtrez-les et supprimez-les.

DELETE FROM `weight` WHERE sku_id IN(
    SELECT sku_id FROM (SELECT sku_id FROM `weight` GROUP BY sku_id HAVING COUNT(sku_id) > 1) table1)AND id NOT IN (
    SELECT id FROM (SELECT MIN(id) AS id FROM `weight` GROUP BY sku_id HAVING COUNT(sku_id) > 1) table2)
Copier après la connexion

La mise à jour fonctionne également sur le même principe que ci-dessus.

Apprentissage recommandé : "tutoriel vidéo mysql"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!