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 :

Copie d'une colonne d'une table d'une base dans une autre base


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 41
    Points : 26
    Points
    26
    Par défaut Copie d'une colonne d'une table d'une base dans une autre base
    Bonjour!

    Alors mon problème peut paraître assez simple, mais je ne trouve pas de solution après de bonnes heures de recherche avec mon ami Google...

    Mon but : J'ai 2 bases de données (base1, base2), avec une table similaire pour chaque base (table). Il faudrait que je copie une colonne de cette table, en provenance de la base1 vers la base2 sans pour autant écraser les valeurs des autres colonnes.

    Problème : je n'arrive pas à faire le lien entre la base1 et la base2

    Le SELECT fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT base1.table1.id,base1.table1.colonne,base2.table2.id,base2.table2.colonne 
    FROM base1.table1
    LEFT JOIN base2.table2 ON base1.table1.id=base2.table2.id;
    Cependant, les UPDATE ou REPLACE ne parviennent pas à faire ce lien entre les 2 bases...
    Une idée?

    D'avance merci

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 029
    Points : 23 748
    Points
    23 748
    Par défaut
    Bonjour,

    La requête suivante fonctionne chez moi (MySQL 5.5) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO base2.table2 (colonne)
    SELECT base1.table1.colonne
    FROM base1.table1
    LEFT JOIN base2.table2 ON base1.table1.id = base2.table2.id
    WHERE base2.table2.id IS NULL
    ORDER BY base1.table1.id;
    A tester sur ta version de MySQL...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par ced Voir le message
    Bonjour,

    La requête suivante fonctionne chez moi (MySQL 5.5) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO base2.table2 (colonne)
    SELECT base1.table1.colonne
    FROM base1.table1
    LEFT JOIN base2.table2 ON base1.table1.id = base2.table2.id
    WHERE base2.table2.id IS NULL
    ORDER BY base1.table1.id;
    A tester sur ta version de MySQL...

    ced
    Bonjour!
    Alors tout d'abord, merci pour ta réponse

    Malheureusement, cette requête ne fonctionne pas et me renvoie une erreur : Duplicate entry '' for key 'PRIMARY'
    Lorsque j'essaie avec replace il me sors : Field 'id' doesn't have a default value

    Pour info, je suis en version 5.1.55.

    NB : a quoi sert le "WHERE base2.table2.id IS NULL"? Ne s'agirait-il pas de "WHERE base2.table2.colonne IS NULL" pour vérifier qu'aucune valeur n'est écrasée?

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 029
    Points : 23 748
    Points
    23 748
    Par défaut
    Peut-on voir le script de création de chaque table ?
    Pour ma part, j'ai mis les 2 colonnes id de chacune en auto-increment, mais ce n'est visiblement pas le cas sur tes tables, d'où le message d'erreur.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Les 2 tables ont cette structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `table` (
      `id` varchar(100) NOT NULL,
      `colonne` mediumtext,
      `colonne2` mediumtext,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    Effectivement, la colonne id n'est pas auto-incrémentée, d'où l'erreur donc... Quelle est l'incidence d'un id non-incrémenté alors que la jointure est faite sur l'id? Il n'y a pas de nouvel enregistrement a créer donc je ne comprend pas pourquoi l'auto-incrémentation serait ici un problème

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 029
    Points : 23 748
    Points
    23 748
    Par défaut
    La question, c'est donc de savoir ce que tu souhaites recopier. La valeur dans colonne et l'id ?
    Sinon, quel id mets-tu dans la table2 pour une valeur de colonne qui n'existe pas encore ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Pour ce que je souhaite, il faut que je rajoute des valeurs dans la colonne "colonne" en fonction de l'id. Une duplication de table aurait été idéale, cependant il y a des valeurs dans les autres colonnes que je ne souhaite pas supprimer.
    Par exemple :
    table 1
    ID colonne colonne2
    ID1 valeur1 a1
    ID2 valeur2 a2
    ID3 valeur3 a3

    table 2
    ID colonne colonne2
    ID1 valeur1 b1
    ID2 valeur2 b2
    ID3 valeur3 b3


    Citation Envoyé par ced Voir le message
    Sinon, quel id mets-tu dans la table2 pour une valeur de colonne qui n'existe pas encore ?
    ced
    Les ID des 2 tables sont en concordances parfaites, un ID1 de la table 1 sera forcément retrouvé dans la table 2. Il n'y a donc pas de valeur par défaut.

    En fait ta question vient de me faire comprendre que le message d'erreur Field 'id' doesn't have a default value, signifie qu'il y a une erreur quelque part dans ma table et qu'un ID est différent d'une table à l'autre!
    Je vais donc vérifier ça tout de suite! merci

    affaire à suivre...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Effectivement, mes ID n'étaient pas parfaitement synchronisés, il y avait quelques erreurs!
    Mon problème est donc résolu, merci beaucoup!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2013, 15h35
  2. Réponses: 0
    Dernier message: 28/06/2011, 15h18
  3. recherche dans une colonne de la table (java-->base de donnees)
    Par lucaazori1988 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 11/01/2010, 21h42
  4. Réponses: 1
    Dernier message: 31/08/2009, 22h48
  5. Réponses: 5
    Dernier message: 07/09/2007, 17h23

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