Update avec select ? [Résolu / SQL] - SQL/NoSQL - Programmation
Marsh Posté le 18-08-2006 à 11:21:25
Faut que tu passes par une sous requete,
avec un where exists ca doit le faire tout dépend de ton sgbd
Marsh Posté le 18-08-2006 à 11:26:10
Du genre un SELECT dans ma clause WHERE de mon UPDATE ..? J'ai Oracle ca ne devrait pas poser de souci mais je vais avoir un problème de syntaxe ...
Marsh Posté le 18-08-2006 à 11:33:57
Si Oracle pas de prob
Quel est le lien exact entre tes deux requetes Update et Select ?
Essai de passer dans un premier temps par un select et sous requete.
Exemple
select B2_C30, B2_C31 from B2 a where exists (select 1 from B2 B
where a.B2_C1 = b.B2_C1...
Enfin la jointure que tu dois faire entre la première requete qui te ramène les résultats et la deuxième qui te donne les ligne à mettre à jour
Marsh Posté le 18-08-2006 à 11:36:01
En fait j'ai du mal à voir la jointure,
"WHERE (LES NUPLETS QUE J'AI RECUP AVEC MON SELECT) "
c'est ta clé primaire ?
Pour une ligne à mettre à jour, les champs à updater dépendent d'un champ de la même ligne ?
Marsh Posté le 18-08-2006 à 11:40:34
Ma clé primaire est le couple B2_C1, B2_C2.
Ce que j'aimerais faire en fait, c'est de mettre à jour (sur toutes les lignes de ma table) mes deux attributs B2_C30 et B2_C31 grâce à B2_C18
En fait B2_C30 et B2_C31 sont calculés à partir de B2_C18 (pour simplifier partie gauche et partie droite d'une chaine de caractères ...)
Marsh Posté le 18-08-2006 à 11:46:30
Si c'est sur la même ligne pas besoin de sous requete tu fais directement l'update
update b2 set b2_c30=RTRIM(B2_C18, 'abcde'), b2_C31 = LTRIM(B2_C18, '0123456789')
Marsh Posté le 18-08-2006 à 12:03:43
Je regarde ça ... Je pense qu'il va falloir que je fasse une clause where à ton update pour ciblé les enregistrements ...
Marsh Posté le 18-08-2006 à 12:06:57
Il prend réellement le B2_C18 de la ligne courante ??? j'ai du mal à imaginer car pour utiliser B2_C18, il faudrait le selectionner quelque part ...
Marsh Posté le 18-08-2006 à 12:12:34
Mais lol ça marche (J'ai Oracle 9i)
Code :
|
L'UPDATE n'a pas de clause WHERE donc la mise à jour sera faite sur tous les nuplets de la table B2. B2_C18 est utilisé pour contruire les deux autres champs et en fait le SGBD prend bien le B2_C18 "courant" de la ligne qui est en train d'être mise à jour. Donc ... Bah ... merci à toi dlaumor ^_^
Marsh Posté le 18-08-2006 à 12:15:01
oui il prend celui de la ligne courante.
Tu peux mettre un where si tu ne veux pas updater toute les lignes mais filtrer sur certaines seulement.
Marsh Posté le 18-08-2006 à 11:12:33
Bonjour à tous, j'ai le nez dans mon bouquin depuis trop longtemps alors je me suis décidé à écrire ce message pour expliquer mon souci (défi ?) ...
Sur la même table B2, je dois mettre à jour deux champs B2_C30 et B2_C31. Ces deux champs sont calculés à partir de B2_C18. En clair :
On fait un select où je récupère la clé B2_C1 et B2_C2 et deux colonnes calculées NUMP et SUFP.
Ensuite, je veux donc faire mon update qui serait du genre :
Voilà ... Je pense que c'est possible mais je dois avoir des lacunes de syntaxe ou de façon de faire ... Quelqu'un peut m'aider ?
@ bientôt.
Message édité par Profil supprimé le 18-08-2006 à 12:13:23