Bonjour à tous,
Peut-on faire un update d'une colonne d'une table à partir d'une colonne d'une autre table ?
Si oui comment et si non que faut-il faire ?
Merci
Bonjour à tous,
Peut-on faire un update d'une colonne d'une table à partir d'une colonne d'une autre table ?
Si oui comment et si non que faut-il faire ?
Merci
y a t'il une colonne commune aux deux tables ? (Identifiant/clé etrangère)
oui, j'ai le même identifiant unique dans chaque table.
J'essayerai un truc du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Upate TableDestination TD set TD.ColonneDest=(select TO.ColonneOrigine from TableOrigine TO where TO.IDOrigine= TD.IDDestination);
Merci, mais cela ne fonctionne pas. IB renvoie ce message d'erreur : 'multiple rows in singleton select'.
C'est d'autant plus frustrant que j'y suis parvenu en passant par ODBC et Access ! Pour info, voici le SQL :
.update TBL_DESTINATION inner join TBL_ORIGINE on id_destination=id_origine set chp_destination=chp_origine
en français ça veux dire que le sous select (celui avec le WHERE) rapporte plusieures lignes. Donc il existe plusieurs TO.IDOrigine pour un TD.IDDestination.
Je ne comprends pas la même chose que toi. Pour moi, la sous-requête renvoie bien ce qu'on lui demande à savoir une ligne par identifiant commun (j'ai bien une relation de un à un entre les 2 tables). Le problème, je crois, c'est que l'on essaie d'affecter à un champ le résultat de la sous-requête (et dans le cas présent un peu plus de 1000 lignes). En fait on ne parvient pas à faire la jointure entre l'identifiant de la table destination et l'identifiant de la sous-requête.
Non tu n'as pas compris, le sous select ayant une clause where ne rapporte (et ne doit rapporter) qu'une seule valeur.
et le message d'erreur vient du fait qu'il en rapporte plusieurs...
2eme on ne peux pas faire de jointure dans un update.
donc pour vérifier ma théorie il suffit d'exécuter cet ordre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select TD.ColonneDest from TableDestination TD inner join TableOrigine TO on (TO.IDOrigine= TD.IDDestination) group by TD.ColonneDest having count(TD.IDDestination)>1;
Mille excuses Barbibulle, tu avais raison ! J'étais persuadé que la table que l'on m'avait fournie était nickel et j'ai eu le tort de ne pas vérifier : un enregistrement en double...
Du coup j'ai effectué la 1ère requête que tu préconisais et cela fonctionne. Merci.
Partager