Maison > Article > base de données > Expliquez comment MySQL supprime les données en double
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
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
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)
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)
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
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)
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!