Maison  >  Article  >  base de données  >  Exemples détaillés de deux méthodes de déduplication dans MySQL

Exemples détaillés de deux méthodes de déduplication dans MySQL

怪我咯
怪我咯original
2017-07-05 11:08:182597parcourir

Cet article présente principalement l'explication détaillée des deux méthodes de déduplication dans mysql et les informations associées de l'exemple de code Voici une explication détaillée des deux méthodes de déduplication une par une. en cas de besoin, vous pouvez vous y référer. Suivant

Déduplication mysql

Méthode 1 :

Lors de l'utilisation de MySQL dans , il est parfois nécessaire de interroger pour trouver des enregistrements non en double dans un certain champ. Bien que mysql fournisse le mot-clé distinct pour filtrer les enregistrements en double redondants et n'en conserver qu'un, c'est souvent le cas. utilisé uniquement pour renvoyer un numéro d'enregistrement non en double au lieu de l'utiliser pour renvoyer toutes les valeurs sans enregistrements en double. La raison en est que distinct ne peut renvoyer que son champ cible, mais ne peut pas renvoyer d'autres champs

Jetons d'abord un coup d'œil à un exemple :

   table
  id name
  1 a
  2 b
  3 c
  4 c
  5 b

structure de la bibliothèque Probablement comme ceci, ce n'est qu'un exemple simple, la situation réelle sera beaucoup plus compliquée.

Par exemple, si je souhaite utiliser une seule instruction pour interroger toutes les données dont les noms ne sont pas en double, je dois utiliser distinct pour supprimer les enregistrements en double redondants.

select distinct name from table

Le résultat obtenu est :

 name
  a
  b
  c

Il semble avoir obtenu l'effet, mais ce que je veux obtenir, c'est la valeur d'identification ? Modifiez l'instruction de requête :

select distinct name, id from table

Le résultat sera :

 id name
  1 a
  2 b
  3 c
  4 c
  5 b

Pourquoi distinct ne fonctionne-t-il pas ? Cela fonctionne, mais cela affecte deux champs en même temps, c'est-à-dire que l'identifiant et le nom doivent être identiques avant de pouvoir être supprimés. . . . . . .

Modifions à nouveau l'instruction de requête :

select id, distinct name from table

Malheureusement, vous ne pouvez rien obtenir à part le message d'erreur, distinct doit être placé en début. Est-il si difficile de distinguer la condition où ? Peut signaler des erreurs. . . . . . .

La déclaration finale utile est la suivante :

select *, count(distinct name) from table group by name

Résultat :

  id name count(distinct name)
  1 a 1
  2 b 1
  3 c 1

Le dernier élément est redondant, laissez-le tranquille, le but est atteint. . . . .

Oh, oui, au fait, group by doit être placé avant order by et limit, sinon une erreur sera signalée. . . . . . . . ! OK

Instruction récapitulative : select *, count(nom distinct) from (select * from table... et autres instructions imbriquées) grouper par nom

Méthode 2 :

Utiliser group by

SELECT * FROM( 
select * from customer where user=( 
  SELECT source_user from customer WHERE user='admin') UNION ALL select * from customer where user=( 
  select source_user from customer where user=( 
    SELECT source_user from customer WHERE user='admin')) union ALL select * from customer where user=( 
  select source_user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))) UNION ALL select * from customer where source_user=(/*我的上线的上线的user*/ 
  select user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))) union all select * from customer where source_user=(/*我的上线的上线的上线user*/ 
  select user from customer where user=( 
  select source_user from customer where user=( 
    select source_user from customer where user=( 
      SELECT source_user from customer WHERE user='admin'))))) as alias group by user;

Attention à ajouter un alias, sinon une erreur sera signalée, veillez à enveloppez-le en dehors de l'instruction Where, puis utilisez Seul le groupe par déduplication prendra effet.

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