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 doublon sur une colonne, à partir d'un CSV ou directement dans des tables sql


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Par défaut Suppression de doublon sur une colonne, à partir d'un CSV ou directement dans des tables sql
    Bonjour,

    J'ai regardé sur le forum, c'est une problématique qui revient apparemment régulièrement, mais je n'ai pas trouvé la réponse qui correspond à mon besoin.

    J'ai un table nommée sources, une seule colonne nommée mots, type VARCAR

    Je dois créer une liste de mot à partir, soit de fichier csv que j'ai en ma possession, et je dédoublonne directement lors de l'import, soit j'importe les fichiers csv et je dédoublonne après.

    J'y ai passé l'après midi et rien à faire, rien ne fonctionne :

    Importer en supprimant les doublons lors de l’import d’une table avec une seule colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO liste_mots_source (mots)
    SELECT mots
    FROM liste_mots_dico01
    WHERE NOT EXISTS (
    	SELECT 1
    	FROM liste_mots_source
    	WHERE liste_mots_source.mots = liste_mots_dico01.mots
    );
    SUPPRIMER LES DOUBLONS D’UNE TABLE EXISTANTE SUR UNE COLONNE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE temp_table AS
    SELECT mots, MIN(mots) AS min_id
    FROM liste_mots_source
    GROUP BY mots
    HAVING COUNT(*) > 1;
     
    DELETE FROM liste_mots_source
    WHERE mots IN (
    	SELECT mots
    	FROM temp_table
    );
     
    DROP TABLE temp_table;
    IMPORT D'UN FICHIER CSV ET DEDOUBLONAGE A LA VOLE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    -- Création de la table temporaire
    CREATE TEMPORARY TABLE temp_sources (
      mots VARCHAR(255)
    );
     
    -- Import des données du fichier CSV dans la table temporaire
    LOAD DATA INFILE '/chemin/vers/le/fichier.csv'
    INTO TABLE temp_sources
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS;
     
    -- Insertion des enregistrements non dupliqués de la table temporaire dans la table "sources"
    INSERT IGNORE INTO sources (mots)
    SELECT mots FROM temp_sources;
     
    -- Suppression de la table temporaire
    DROP TABLE temp_sources;
    Voilà, cela decrait être simple en théorie, mais rien y fait, j'ai toujours des doublons, ou je n'ai plus du tout de valeur, par exemple, si le mot abandon apparait 3 fois, les trois occurences sont supprimées.

    J'utilise phpMyadmin, je n'ai pas accès à un serveur, du coup, c'est pas top non plus.

    Si quelqu'un peut m'aider, cela serai sympa.

    Patrice

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 889
    Par défaut
    Salut Gestgm.

    Voici le fichier que je vais charger dans la table "test" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    abandon
    manger
    pourquoi
    abandon
    étrange
    cuisine
    manger
    abandon
    étrange
    pourquoi
    Voici deux exemples de la suppression des doublons :
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`   integer unsigned NOT NULL auto_increment primary key,
      `mot`  varchar(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    CREATE UNIQUE INDEX `idx` USING BTREE ON `test` (`mot`)
    --------------
     
    --------------
    LOAD DATA LOCAL INFILE 'fichier.txt'
         INTO TABLE `test`
         CHARACTER SET latin1
         FIELDS TERMINATED            BY ','
                OPTIONALLY ENCLOSED   BY '\"'
                ESCAPED               BY '\\'
         LINES  TERMINATED            BY '\r\n'
         IGNORE 0 LINES
         (mot)
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+----------+
    | id | mot      |
    +----+----------+
    |  1 | abandon  |
    |  5 | cuisine  |
    |  4 | étrange  |
    |  2 | manger   |
    |  3 | pourquoi |
    +----+----------+
    --------------
    drop index `idx` on `test`
    --------------
     
    --------------
    truncate table `test`
    --------------
     
    --------------
    LOAD DATA LOCAL INFILE 'fichier.txt'
         INTO TABLE `test`
         CHARACTER SET latin1
         FIELDS TERMINATED            BY ','
                OPTIONALLY ENCLOSED   BY '\"'
                ESCAPED               BY '\\'
         LINES  TERMINATED            BY '\r\n'
         IGNORE 0 LINES
         (mot)
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+----------+
    | id | mot      |
    +----+----------+
    |  1 | abandon  |
    |  2 | manger   |
    |  3 | pourquoi |
    |  4 | abandon  |
    |  5 | étrange  |
    |  6 | cuisine  |
    |  7 | manger   |
    |  8 | abandon  |
    |  9 | étrange  |
    | 10 | pourquoi |
    +----+----------+
    --------------
    delete t1 from test as t1 inner join test as t2 on t2.mot = t1.mot and t2.id < t1.id
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+----------+
    | id | mot      |
    +----+----------+
    |  1 | abandon  |
    |  2 | manger   |
    |  3 | pourquoi |
    |  5 | étrange  |
    |  6 | cuisine  |
    +----+----------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...

    Cordialement.
    Artemus24.
    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Par défaut TOP
    Super, merci beaucoup !

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 613
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Si la colonne "mots" à pour vocation de stocker un et un seul mot par ligne, alors elle devrait s'appeler "mot" (sans "S") et du varchar(255) ne sert à rien s'il s'agit de mots français.

    Si cette colonne a pour vocation de stocker une liste de mots, alors c'est une erreur de modélisation (viol de 1re forme normale)

    Ensuite, quel est le but de cette liste de mots ?
    S'il s'agit de créer un dictionnaire et donc d'associer un mot à une définition, alors il est normal d'avoir un même mot plusieurs fois (cas des homonymes et des polysèmes).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Par défaut
    Bonjour,

    Merci pour votre commentaire.

    Cette liste à pour vocation d'effectuer des contrôles sur l'un de mes projets et ne sera pas exploitée en tant que telle.

    Elle répond parfaitement à mon besoin et uniquement sans doublons.

    Cordialement

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 889
    Par défaut
    Salut Escartefigue.

    Citation Envoyé par Escartefigue
    et du varchar(255) ne sert à rien s'il s'agit de mots français.
    Le mot le plus long de la langue française est "anticonstitutionnellement", soit 25 lettres.
    Ca rentre parfaitement dans du varchar(255) à la condition d'utiliser du latin1 ou latin9.

    Cordialement.
    Artemus24.
    @+

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 613
    Billets dans le blog
    10
    Par défaut
    Nous sommes d'accord, c'est pourquoi du varchar(25) suffit !

  8. #8
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 889
    Par défaut
    Merci pour ta précision car ce n'est pas ce à quoi j'avais pensé en lisant ta remarque sur le varchar(255).

Discussions similaires

  1. Supprimer doublon sur une colonne
    Par Jb_One36 dans le forum Développement
    Réponses: 3
    Dernier message: 01/02/2018, 14h09
  2. [XL-2010] Suppression de doublons sur deux colonnes via VBA
    Par Instinct dans le forum Macros et VBA Excel
    Réponses: 38
    Dernier message: 18/02/2016, 15h56
  3. [Modèle Relationnel] Suppression de doublon sur une hierarchie plate
    Par djalil dans le forum Schéma
    Réponses: 1
    Dernier message: 16/11/2011, 21h24
  4. [XL-2007] interdire saisie doublon sur une colonne
    Par borisp dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 15/11/2011, 14h39
  5. Suppression de doublons sur une grosse table
    Par CaptainT dans le forum SQL
    Réponses: 20
    Dernier message: 24/05/2008, 09h25

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