IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Suppression de doublons


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant(IUT info)/Stagiaire
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant(IUT info)/Stagiaire

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 47
    Points
    47
    Par défaut Suppression de doublons
    Bonjour à toutes et à tous !

    Voilà, je fais des insertions dans une base de données avec plusieurs fichiers CSV. J'arrive à faire en sorte qu'il n'y ai pas de doublons dans le même CSV. Mais, si je refais l'insertion, sur le même fichier, ma table est doublée (normal me direz vous). De ce fait, je me suis tourné vers des requêtes SQL. En cherchant, j'ai trouvé plusieurs post résolu donnant la solution. J'ai donc utilisé la meme syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter ignore table candidat add unique index(Identifiant_Cand)
    Cependant, ca me sort l'erreur suivante : #1062 - Duplicata du champ 'Identifiant' pour la clef 'Identifiant_Cand_2'.
    Ce que je n'arrive pas à comprendre, c'est que la doc de Mysql dit : "IGNORE est une extension MySQL pour ANSI SQL92. Cette option contrôle la fa¸on dont ALTER TABLE fonctionne s'il y a des duplications sur une clef unique de la nouvelle table. Si IGNORE n'est pas spécifiée, la copie est annulée et la table originale est restaurée. Si IGNORE est spécifiée, les lignes contenant les éléments doublons de la table seront effacées, hormis la première, qui sera conservée. "
    De ce fait, mes suppressions devraient quand même s'effectuer...

    Ai-je mal compris quelque chose ? J'aimerais qu'on m'explique plutôt que de me balancer la solution, pour que je puisse, à l'aide d'une requête, pouvoir faire sauter tous les doublons...
    A savoir que j'ai un auto-increment.

    Merci de votre aide !

  2. #2
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par Byron_1 Voir le message
    Cependant, ca me sort l'erreur suivante : #1062 - Duplicata du champ 'Identifiant' pour la clef 'Identifiant_Cand_2'.

    Merci de votre aide !
    Changez le moteur de votre table pour MyISAM au lieu de INNODB. Et refaites le test.

  3. #3
    Membre du Club
    Homme Profil pro
    Etudiant(IUT info)/Stagiaire
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant(IUT info)/Stagiaire

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 47
    Points
    47
    Par défaut
    Une seule chose à dire... MERCI !

    Cependant, j'ai une petite question. Comment le faire sur toutes les tables d'un coup sans passer par Opération => Storage engine => MylSAM ? Ceci est une question de culture G, car dans mon cas, je ne travaille que sur 8 bases, mais je vois bien le problème arriver si on en utilise beaucoup !

    Je met le sujet en résolu, mais je veux bien une réponse sur ca du coup

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Tu es bien conscient que si tu utilises la méthode de @manzeki, tu perds tout l'intêret du SGBDR.
    En mattant les tables à MyIsam tout référence est perdue, en gros tu peux mettre n'importe quoi dans tes tables, il n'y aura jamais d'erreur.

    Je prend un exemlple :

    Tu as deux tables, 'cleint' et 'adresse'.

    Chaque cleint peut avoir une adresse et une adresse à un client (basic).

    Avec tes tables en MyIsam, une adresse pourras ne pas avoir de client.

  5. #5
    Membre du Club
    Homme Profil pro
    Etudiant(IUT info)/Stagiaire
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant(IUT info)/Stagiaire

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 47
    Points
    47
    Par défaut
    Hum.... Ce que je peux faire, c'est donc passer en MYISAM le temps de supprimer les doublons, et de repasser en INNOBD apres... Sachant que je le fait en script php. Est-ce possible ?

    Et non, je n'en n'avais pas conscience, merci.

  6. #6
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par Byron_1 Voir le message
    Hum.... Ce que je peux faire, c'est donc passer en MYISAM le temps de supprimer les doublons, et de repasser en INNOBD apres... Sachant que je le fait en script php. Est-ce possible ?

    Et non, je n'en n'avais pas conscience, merci.
    Tout dépends, vous pouvez choisir un moteur en fonction des besoins, gardez les autres tables en INNODB.

    La solution que vous mentionner peut aussi fonctionner.

    Vous pouvez aussi utiliser deux tables identiques.
    table1 moteur MYISAM servant à supprimer les doublons
    table2 moteur innodb
    Apres insertion dans la table1, vous faites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT IGNORE INTO table2 (c1, c2, c3) SELECT c1, c2, c3 FROM table1;
    TRUNCATE table1;
    Idée : La table table1 peut être une table temporaire, ce qui est mieux pour les performances.

  7. #7
    Membre du Club
    Homme Profil pro
    Etudiant(IUT info)/Stagiaire
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant(IUT info)/Stagiaire

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 47
    Points
    47
    Par défaut
    Je ne sais pas niveau performances si faire des tables pourrait-être rentable. Car mes tables peuvent contenir jusqu'a 300 000 lignes, et cela ne cesse de monter. Donc bon, a voir. Mon problème le plus gros est le temps que j'ai pour réaliser tout ca. Je suis en stage, et il me reste moins d'un mois x) Et je préfère fournir une appli qui marche, qu'une appli opti qui ne marche pas.... Vu qu'a l'iut, je n'ai pas vu comment cela marchait >.<
    Cependant, vu que mes tables passent leur temps à grossir, faudrais aussi que je verifie si ce que je veux passer entre la table temp et l'autre vraie table, ne rajoute pas de doublons.
    En tout cas, merci de votre aide.

  8. #8
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par Byron_1 Voir le message
    Je ne sais pas niveau performances si faire des tables pourrait-être rentable. Car mes tables peuvent contenir jusqu'a 300 000 lignes, et cela ne cesse de monter. Donc bon, a voir. Mon problème le plus gros est le temps que j'ai pour réaliser tout ca. Je suis en stage, et il me reste moins d'un mois x) Et je préfère fournir une appli qui marche, qu'une appli opti qui ne marche pas.... Vu qu'a l'iut, je n'ai pas vu comment cela marchait >.<
    Cependant, vu que mes tables passent leur temps à grossir, faudrais aussi que je verifie si ce que je veux passer entre la table temp et l'autre vraie table, ne rajoute pas de doublons.
    En tout cas, merci de votre aide.

    Je comprends l'urgence.

    Uitiliser deux tables est une solution efficace, tu n'auras même pas à te soucier du type de moteur.

    - Importer les données dans la table temporaire
    cette table ne doit avoir de clé unique,
    elle sera automatiquement supprimée après la session de l'utilisateur

    - Inserttion dans la table finale table2
    Cette table doit avoir une clé unique
    INSERT IGNORE INTO table2 (c1, c2, c2) SELECT c1, c2, c3 FROM table1

    Ignore est là pour résoudre le problème des doublons

    Je suis curieux de savoir, de quelle genre de données il s'agit, est-ce des données de télécommunication ?

  9. #9
    Membre du Club
    Homme Profil pro
    Etudiant(IUT info)/Stagiaire
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant(IUT info)/Stagiaire

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 47
    Points
    47
    Par défaut
    Je verrais ce que je pourrais changer dans mon code pour passer avec deux tables.

    Ce sont des statistiques sur des questions qui ont étés répondues x) Et elle sera mis a jour a chaque nouveau test. Donc, a chaque candidat, j'enregistre toutes ses réponses, donc ca monte vite :p

    Merci a vous deux en tout cas. Je ne m'en occuperais pas aujourd'hui, j'ai de la papaerasse à rédiger, je verrais ce w-e pour étudié ce que je pourrais changer, et lundi je m'y mettrai je pense.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression de doublons et insertion
    Par Samish dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/08/2005, 21h57
  2. Réponses: 17
    Dernier message: 03/12/2004, 11h17
  3. [langage] Suppression de doublon dans tableau
    Par LFC dans le forum Langage
    Réponses: 5
    Dernier message: 15/04/2004, 14h08
  4. Requête de suppression de doublons : besoin d'aide
    Par biocorp dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2004, 17h04
  5. [LG]Suppression de doublons
    Par moustique31 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2003, 21h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo