Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2011, 10h18   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 41
Points : 12
Points : 12
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 :
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
Kikkoman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 15h38   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Bonjour,

La requête suivante fonctionne chez moi (MySQL 5.5) :
Code :
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
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 16h59   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 41
Points : 12
Points : 12
Citation:
Envoyé par ced Voir le message
Bonjour,

La requête suivante fonctionne chez moi (MySQL 5.5) :
Code :
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?
Kikkoman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 23h05   #4
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 08h34   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 41
Points : 12
Points : 12
Les 2 tables ont cette structure :
Code :
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
Kikkoman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 09h17   #6
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
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
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 09h51   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 41
Points : 12
Points : 12
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...
Kikkoman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 10h52   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 41
Points : 12
Points : 12
Effectivement, mes ID n'étaient pas parfaitement synchronisés, il y avait quelques erreurs!
Mon problème est donc résolu, merci beaucoup!
Kikkoman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h54.


 
 
 
 
Partenaires

Hébergement Web