Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1851 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu / SQL] Update avec select ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu / SQL] Update avec select ?

n°1427067
Profil sup​primé
Posté le 18-08-2006 à 11:12:33  answer
 

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.
 

Code :
  1. SELECT B2_C1, B2_C2, RTRIM(B2_C18, 'abcde') AS NUMP, LTRIM(B2_C18, '0123456789') AS SUFP
  2. FROM B2


 
Ensuite, je veux donc faire mon update qui serait du genre :
 

Code :
  1. UPDATE B2 SET B2_C30 = (NUMP), B2_C31 = (SUFP) WHERE (LES NUPLETS QUE J'AI RECUP AVEC MON SELECT)


 
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
mood
Publicité
Posté le 18-08-2006 à 11:12:33  profilanswer
 

n°1427076
dlaumor
Posté le 18-08-2006 à 11:21:25  profilanswer
 

Faut que tu passes par une sous requete,
avec un where exists ca doit le faire tout dépend de ton sgbd

n°1427080
Profil sup​primé
Posté le 18-08-2006 à 11:26:10  answer
 

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 ...

n°1427085
dlaumor
Posté le 18-08-2006 à 11:33:57  profilanswer
 

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

n°1427086
dlaumor
Posté le 18-08-2006 à 11:36:01  profilanswer
 

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 ?

n°1427090
Profil sup​primé
Posté le 18-08-2006 à 11:40:34  answer
 

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 ...)

n°1427093
dlaumor
Posté le 18-08-2006 à 11:46:30  profilanswer
 


 
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')

n°1427105
Profil sup​primé
Posté le 18-08-2006 à 12:03:43  answer
 

Je regarde ça ... Je pense qu'il va falloir que je fasse une clause where à ton update pour ciblé les enregistrements ...

n°1427108
Profil sup​primé
Posté le 18-08-2006 à 12:06:57  answer
 

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 ...

n°1427114
Profil sup​primé
Posté le 18-08-2006 à 12:12:34  answer
 

Mais lol ça marche (J'ai Oracle 9i)
 

Code :
  1. UPDATE B2 SET B2_C30=RTRIM(B2_C18, 'bisterquan'), B2_C31=LTRIM(B2_C18, '0123456789')


 
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 ^_^

mood
Publicité
Posté le 18-08-2006 à 12:12:34  profilanswer
 

n°1427115
dlaumor
Posté le 18-08-2006 à 12:15:01  profilanswer
 

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.

n°1427117
dlaumor
Posté le 18-08-2006 à 12:16:07  profilanswer
 

De rien ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu / SQL] Update avec select ?

 

Sujets relatifs
[RESOLU] Jointure + like[Résolu] Utiliser in_array avec mysql_fetch_array
pb requête update Access avec equi-jointure de table[Resolu][C#.NET] Appel methode static impossible ?
[Résolu] Erreur de syntaxe, qui peut m'aider ?[Résolu] Bug embêtant avec les variables de session
[NSIS][Résolu] comparaison de stringdébutant - vérifier le résultat de mon code [RESOLU]
[Résolu]Signe non reconnu dans une boucle[RESOLU][CSS] Problème de float
Plus de sujets relatifs à : [Résolu / SQL] Update avec select ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR