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 06/05/2011, 16h52   #1
Invité de passage
 
Inscription : juillet 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 18
Points : 4
Points : 4
Par défaut UPDATE entre 2 bases

Bonjour,
Sous PHPMyAdmin j'ai 2 bases de données :
BASE1
BASE2

Dans ces bases j'ai une table qui s'appelle :
TABLE1
TABLE2
Ces 2 tables ont la même structure (22 champs chacune). Le premier champ est ma clé.

Je voudrais faire une requête de ce style :

Code :
1
2
3
4
 
UPDATE BASE1.TABLE1
SET BASE1.TABLE1.CHAMP15 = BASE2.TABLE2.CHAMP15
WHERE BASE1.TABLE1.CHAMP1 = BASE2.TABLE2.CHAMP1
Je ne sais pas si c'est très clair.
En résumé, je veux mettre à jour un champ d'une table d 'une base à partir d'un champ d'une table d'une autre base.

Merci d'avance pour vos réponses
tete-jaune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 14h47   #2
Membre habitué
 
Avatar de bbl22
 
Inscription : février 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 114
Points : 112
Points : 112
Bjr,

Tu peux faire un select dans un update du genre:

Code :
1
2
3
4
 
UPDATE BASE1.TABLE1
SET BASE1.TABLE1.CHAMP15 = (SELECT  BASE2.TABLE2.CHAMP15 FROM BASE2.TABLE2)
WHERE BASE1.TABLE1.CHAMP1 = BASE2.TABLE2.CHAMP1
__________________
bbl MeMa
bbl22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 16h44   #3
Invité de passage
 
Inscription : juillet 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 18
Points : 4
Points : 4
Bonjour,
Merci pour votre réponse.
PhpMyAdmin me dit que CHAMP1 de TABLE2 de BASE2 n'existe pas :

Unknown column 'BASE2.TABLE2.CHAMP1' in 'where clause'


J'ai l'impression qu'un UPDATE ne fonctionne pas entre 2 bases sous PhpMyAdmin.
Par contre un SELECT est correct. Je n'ai pas d'erreur si je combine des champs des 2 tables.
J'ai même réussi à faire une vue dans la première base des données de la table de la deuxième base mais ensuite l'UPDATE à partir de la vue ne marche pas.
tete-jaune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 17h18   #4
Invité de passage
 
Inscription : juillet 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 18
Points : 4
Points : 4
J'ai trouvé la solution. En fait l'erreur dans ma requête....

Requête fausse :
Code :
1
2
3
UPDATE BASE1.TABLE1
SET BASE1.TABLE1.CHAMP15 = BASE2.TABLE2.CHAMP15
WHERE BASE1.TABLE1.CHAMP1 = BASE2.TABLE2.CHAMP1
Requête juste :
Code :
1
2
3
UPDATE BASE1.TABLE1 BASE2.TABLE2
SET BASE1.TABLE1.CHAMP15 = BASE2.TABLE2.CHAMP15
WHERE BASE1.TABLE1.CHAMP1 = BASE2.TABLE2.CHAMP1
Il faut mettre le nom des 2 tables après le UPDATE comme si c'était un SELECT entre plusieurs tables, on met les noms des tables après le FROM
tete-jaune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 15h02   #5
Invité régulier
 
Louis
Inscription : mars 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Louis

Informations forums :
Inscription : mars 2011
Messages : 10
Points : 6
Points : 6
Bonjour, quel est le sgbd que vous utilisez ?
Je suis sous mysql 5.1.30 et cette syntaxe ne fonctionne pas chez moi :

Code :
1
2
3
4
 
UPDATE wp_louis.wp_posts jl_louis.jos_content 
SET post_content = jl_louis.jos_content.fulltext
WHERE wp_louis.wp_posts.post_title = jl_louis.jos_content.title;
à noter que les deux bases sont sur localhost (xampp) par contre mes deux tables ne sont pas les mêmes (ce sont en fait les tables qui contiennent les articles pour joomla! et les posts pour wordpress).

erreur renvoyée :
Code :
1
2
Erreur SQL !UPDATE wp_louis.wp_posts jl_louis.jos_content SET post_content = jl_louis.jos_content.fulltext WHERE wp_louis.wp_posts.post_title = jl_louis.jos_content.title
You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near '.jos_content SET post_content = jl_louis.jos_content.fulltext WHERE wp_lou' at line 1
Louklo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 16h22   #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
On ne peut mettre qu'un seul nom de table derrière le mot-clé UPDATE.
Voir la syntaxe de cette commande ici : http://dev.mysql.com/doc/refman/5.0/fr/update.html
__________________
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 19/05/2011, 16h40   #7
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Saluton,
Ben, mon cher Ced, on y lit
Citation:
Depuis MySQL version 4.0.4, vous pouvez aussi faire des opérations de UPDATE qui couvrent plusieurs tables :

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

L'exemple ci-dessus montre une jointure interne, en utilisant la virgule comme séparateur, mais une commande UPDATE multi-table peut utiliser n'importe quel type de jointure autorisée dans une commande SELECT, tel qu'un LEFT JOIN.

Note : vous ne pouvez pas utiliser ORDER BY ou LIMIT avec les UPDATE multi-table.
Alors qui croire ?
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 17h11   #8
Invité régulier
 
Louis
Inscription : mars 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Louis

Informations forums :
Inscription : mars 2011
Messages : 10
Points : 6
Points : 6
A priori ma requête était fausse de toute façon. Par contre j'ai réussi à faire ce que je voulais en passant par une vue intermédiaire, comme ça je n'ai besoin que d'invoquer qu'un nom de table lors de l'update.. et là ça marche !
(.. presque encore un problème de syntaxe sql mais qui n'a plus rien a voir )
Louklo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 09h18   #9
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
Citation:
Envoyé par Maljuna Kris Voir le message
Alors qui croire ?
Et pan ! sur mon bec...

Bien vu, j'ai oublié la possibilité des jointures .

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 20/05/2011, 10h09   #10
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Citation:
Envoyé par ced Voir le message
Et pan ! sur mon bec...
Désolé, pas trop fort le pan, j'espère ?
Citation:
Envoyé par ced Voir le message
Bien vu, j'ai oublié la possibilité des jointures .
Non, non, juste lu...jusqu'au bout du lien
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris 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 09h15.


 
 
 
 
Partenaires

Hébergement Web