133 votes

Comment trouver les doublons dans 2 colonnes et non pas 1

Dans ma base de données, sur une table, il y a plusieurs cloumns mais la seule 2 de l'intérêt maintenant sont stone_id et upcharge_title. Individuellement, ils peuvent avoir des doublons, mais ils devraient ne jamais avoir un double de DEUX d'entre eux ayant la même valeur.

Par exemple stone_id peut avoir des doublons aussi longtemps que pour chaque double upsharge titre est différent, et vice verca. Mais dire par exemple stone_id = 412 et upcharge_title = "saphir" combinitation ne doit avoir lieu qu'une fois. J'espère que je vais faire clair.

C'est ok:

stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "ruby"

C'est ok:

stone_id = 412 upcharge_title = "sapphire"
stone_id = 413 upcharge_title = "sapphire"

Ce n'est PAS ok:

stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "sapphire"

Quelqu'un peut me dire une requête trouver les doublons dans les deux champs? Et, si possible, est-il un moyen de mettre ma base de données pour ne pas permettre à qui?

Je suis en utilisant la version de MySQL 4.1.22

MERCI!!!

Mise à JOUR: Merci beaucoup jusqu'à présent, les gars, quelqu'un Peut-il me dire une requête qui pourrait SUPPRIMER les doublons, mais laisser 1 copie. Et s'il vous plaît me dire comment configurer la clé composite. Je ne sais comment l'installation primaires et les clés uniques, mais pas les clés composites.

Merci!!!

258voto

Miyagi Coder Points 2377

Vous devez configurer une clé composite entre les deux champs. Cela nécessitera un identifiant unique stone_id et upcharge_title pour chaque ligne.

En ce qui concerne la recherche des doublons existants, essayez ceci:

 select   stone_id,
         upcharge_title,
         count(*)
from     your_table
group by stone_id,
         upcharge_title
having   count(*) > 1
 

37voto

SeanDowney Points 5299

J'ai trouvé utile d'ajouter un index uniques à l'aide d'un "ALTER IGNORER" qui supprime les doublons et applique les enregistrements uniques qui sonne comme vous voulez le faire. Donc la syntaxe serait:

ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(`id`, `another_id`, `one_more_id`);

Cela ajoute la contrainte unique ce qui signifie que vous n'aurez jamais de doublons et de les IGNORER supprime les doublons existants.

Vous pouvez en lire plus à propos hein MODIFIER IGNORER ici: http://mediakey.dk/~cc/mysql-supprimer-double-entrées/

11voto

Jason Punyon Points 21244

Vous pouvez trouver des doublons comme celui-ci ..

 Select
    stone_id, upcharge_title, count(*)
from 
    particulartable
group by 
    stone_id, upcharge_title
having 
    count(*) > 1
 

6voto

Ian Nelson Points 20020

Pour trouver les doublons:

 select stone_id, upcharge_title from tablename group by stone_id, upcharge_title having count(*)>1
 

Pour éviter cela à l'avenir, créez une clé unique composite sur ces deux champs.

5voto

P Daddy Points 14228

Incidemment, une contrainte unique composite sur la table empêcherait cela de se produire en premier lieu.

 ALTER TABLE table
    ADD UNIQUE(stone_id, charge_title)
 

(Ceci est valide T-SQL. Pas sûr de MySQL.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X