Maison  >  Article  >  base de données  >  Expliquez comment MySQL supprime les données en double

Expliquez comment MySQL supprime les données en double

藏色散人
藏色散人avant
2022-01-11 16:02:0610515parcourir

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer