Maison  >  Article  >  base de données  >  Comment supprimer les données en double dans MySQL ?

Comment supprimer les données en double dans MySQL ?

零下一度
零下一度original
2017-06-29 15:42:371350parcourir

Cet article présente principalement les informations pertinentes de MySQL Explication détaillée des instances de données en double. Les amis dans le besoin peuvent se référer à

MySQL Explication détaillée des instances de données en double

Il existe deux sens d'enregistrement en double, l'un est un enregistrement complètement en double, c'est-à-dire que tous les champs sont répétés, et l'autre est un enregistrement avec certains champs répétés. Pour le premier type de duplication, il est relativement facile à résoudre. Utilisez simplement le mot-clé distinct dans l'instruction query pour supprimer la duplication. Presque tous les systèmes de bases de données prennent en charge l'opération distincte. La principale raison de cette duplication est une mauvaise conception de la table, qui peut être évitée en ajoutant une clé primaire ou une colonne index unique à la table.


select distinct * from t;

Pour le deuxième type de problème de doublon, il est généralement nécessaire d'interroger n'importe quel enregistrement parmi les enregistrements en double. Supposons que la table t comporte trois champs : id, name et address. id est la clé primaire et les champs en double sont le nom et l'adresse. Il est nécessaire d'obtenir un ensemble de résultats unique de ces deux champs.

--Oracle, MySQL, utilisent une sous-requête corrélée


select * from t t1

 where t1.id =

 (select min(t2.id)

  from t t2

  where t1.name = t2.name and t1.address = t2.address);

--Hive ne prend en charge que la clause FROM Utilisez la sous-requête , la sous-requête doit avoir un nom et la colonne doit être unique


select t1.*

 from t t1,

   (select name, address, min(id) id from t group by name, address) t2

 where t1.id = t2.id;

-- Vous pouvez également utiliser l'analyse row_number() de la rucheFonction


select t.id, t.name, t.address

 from (select id, name, address,

row_number() over (distribute by name, address sort by id) as rn 

     from t) t 

 where t.rn=1;

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:
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