/Le 14/02/2012 23:17, Bernard Ribot a écrit :/
/Le 14/02/2012 21:41, Lucien RUBEMPRE a écrit :
/
/Pour détecter les doublons d'une table (lors de la saisie), il faut utiliser la formule suivante :
/
/*ALTER TABLE t_pays ALTER COLUMN ClairPays UNIQUE KEY `ClairPays` (`ClairPays`)*
/
/Non, j'avais rectifié. C'est :
ALTER TABLE t_pays ADD CONSTRAINT  nom_contrainte  UNIQUE (ClairPays);

/
/Pour détecter tous les doublons a posteriori, il faut utiliser :
/
/*ALTER TABLE t_pays DROP CONSTRAINT 'ClairPays' (ClairPays')*
/
/Non, ça, c'est pour supprimer la contrainte UNIQUE KEY ajoutée sur le champ ClairPays pour éviter la création de doublons sur ce champ. La syntaxe exacte est : ALTER TABLE t_pays DROP KEY nom_contrainte;

Pour les repérer à posterio c'est ça :
SELECT t_pays.IDPays, t_pays.ClairPays, COUNT(*) FROM t_pays GROUP BY t_pays.ClairPays
HAVING COUNT(*) > 1;

On peut même les supprimer automatiquement avec cette séquence de commandes à exécuter l'une après l'autre : CREATE TEMPORARY TABLE table_temp SELECT idpays FROM t_pays GROUP BY ClairPays;
ALTER TABLE table_temp ADD UNIQUE (idpays);
DELETE FROM t_pays WHERE idpays NOT IN (SELECT idpays FROM table_temp);
DROP TEMPORARY TABLE table_temp;
OPTIMIZE TABLE t_pays;
Ce n'est pas de moi mais je l'ai testée sur une de mes tables : ça fonctionne.

Bernard /
Houlà, bon : alors je revoie ma copie :

- Pour empêcher les doublons sur un champ d'une table (lors de la saisie), il faut utiliser, la formule suivante (en l'adaptant à vos appellations locales) :
*ALTER TABLE t_pays ADD CONSTRAINT  anti_doublon  UNIQUE (ClairPays)*

- Pour annuler la "contrainte" anti-doublons ci-dessus, ce serait :
*ALTER TABLE t_pays DROP KEY anti_doublons*

- Pour lister les doublons a posteriori (au cas où des petits malins auraient réussi à passer au travers ;-) ) :
faire une requête contenant cette formule SQL :
*SELECT t_pays.IDPays, t_pays.ClairPays, COUNT(*) FROM t_pays GROUP BY t_pays.ClairPays
HAVING COUNT(*) > 1*

/_NB_ : trois formules testées et certifiées en état de marche par votre serviteur, sous LibreOffice 3.5.0rc3 /

Et enfin, une fois qu'on les noms de ceux qui font les c...
il suffit de leur porter le coup de grâce, à l'aide du dernier alinea du post de Bernard (voir plus haut). Et encore merci à lui pour son incroyable patience.


--
------------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@fr.openoffice.org
For additional commands, e-mail: sy...@fr.openoffice.org with Subject: help

Répondre à