Update sur plusieurs tables

Messages postés
109
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
4 juin 2008
- - Dernière réponse : BasicInstinct
Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
- 12 mai 2006 à 17:35
Bonjour,

Je voudrais savoir comment mettre à jour une table à partir des données d'une autre table. Je m'explique...

J'ai une table A et une table B. Je me suis rendu compte que les champs de B peuvent s'insérer dans A, ce qui me permettra par la suite de virer la table B. Dans ma table A, j'ai 3 champs [a,b,c] qui correspondent aux champs [x,y,z] de la table B que je veux faire passer dans la table A (sachant que A et B ont un même identifiant [i]. Donc je cherche à faire une requête UPDATE qui va m'affecter les valeurs de [x,y,z] dans [a,b,c]. Voilà la requête que j'ai fait :

UPDATE A,B
SET A.a=B.x, A.b=B.x, A.c=B.z
WHERE A.i=B.i

Bien entendu, elle ne fonctionne pas... après quelques réflexions, je comprends pourquoi elle ne fonctionne pas et je me suis dit qu'il faut peut-être faire intervenir une sous-requête... mais j'en suis pas sûr! Sinon, petite précision, j'utilise MySQL 5!

Voilà... j'espère avoir été assez clair!

Merci d'avance
Afficher la suite 

3 réponses

Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
10
0
Merci
j'ai fait ca sous access, à adapter bien sur

http://www.sqlfr.com/infomsg/ACCESS-UPDATE-3_731842.aspx

BasicInstinct
Commenter la réponse de BasicInstinct
Messages postés
109
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
4 juin 2008
0
Merci
Je viens de tester à l'instant la requête suivante sous MySQL :

update A join B on (A.i = B.i)
SET A.a=B.x, A.b=B.x, A.c=B.z

Malheureusement, ça ne fonctionne pas... MYSQL accepte la requête mais aucun champ n'est mis à jour. J'ai donc essayé plus simple :

update A join B on (A.i = B.i)

SET A.a='Poulet'

Et là, surprise, ça fonctionne! Enfin, en partie! En effet, seulement le premier enregistrement de A.a a été mis à jour! J'ai essayé aussi la solution que préconise aieeeuuuuuu dans ton lien en faisant :

UPDATE A
SET A.a = (
SELECT x
FROM B
WHERE A.i = B.i
)

Mais ça ne fonctionne pas plus... Je pense que MYSQL a du mal avec les update à jointure! Si vous avez d'autres propositions, je suis preneur!
Commenter la réponse de Chris_LaFouine
Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
10
0
Merci
ca devrait marcher, j'ai trouvé ca sur le site de mysql:

Update column in a table whose values are not found in another table.

UPDATE TABLE_1 LEFT JOIN TABLE_2 ON TABLE_1.COLUMN_1= TABLE_2.COLUMN_2
SET TABLE_1.COLUMN = EXPR WHERE TABLE_2.COLUMN2 IS NULL

An outerjoin is performed based on the equijoin condition.
Records not matching the equijoin from table2 are marked with null.

This facilitates to update table1 column with expression whose corresponding value from table2 is returned as NULL

BasicInstinct
Commenter la réponse de BasicInstinct