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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  update plusieurs condition

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

update plusieurs condition

n°2126522
donny3
Posté le 14-02-2012 à 17:47:09  profilanswer
 

salut,
 
j'essai de faire un update avec plusieurs condition en une seule fois
mais je ne sais pas comment m'y prendre.
Voila je dois updater la colonne a1 de la table A avec les valeurs suivantes :
a1= 12 je mets r8
a1= 22 je met r7
 
je peux le faire en deux fois :
update A set a1='r8' where a1=12;
update A set a1='r7' where a1=22;
 
Est-ce possible de le faire en une seule requête ?
est-ce plus optimal en seule requête que deux requête séparé ?
 
Merci

mood
Publicité
Posté le 14-02-2012 à 17:47:09  profilanswer
 

n°2126557
Sve@r
Posté le 14-02-2012 à 22:46:54  profilanswer
 

donny3 a écrit :

Est-ce possible de le faire en une seule requête ?


Salut
Non, ce n'est pas possible

n°2126574
deliriumtr​emens
sic transit intestinal...
Posté le 15-02-2012 à 06:46:12  profilanswer
 

Je ne serais pas aussi définitif.
 
Sous Sql server(2005+), Mysql(5+ ?),  tu dois pouvoir  faire une des 2 versions ci-dessous (else final utile selon les clauses du where)
 

Code :
  1. update xxx
  2. set a1 = (case
  3.     when a1='12' then 'r8'
  4.     when a1= '22' then 'r7'
  5.     else a1
  6.     end)
  7. where a1 in ('12', '22')//on évite de tout traiter


 

Code :
  1. update xxx
  2. set a1 = (case a1
  3.     when '12' then 'r8'
  4.     when '22' then 'r7'
  5.     else a1
  6.     end)
  7. where a1 in ('12', '22')//on évite de tout traiter


 
Sous Oracle, une variation des syntaxes ci-dessus doit être possible avec 2-3 modifs, ou sinon tu peux faire

Code :
  1. update xxx
  2. set a1 = decode(a1, '12', 'r8', '22', 'r7', a1)
  3. where a1 in ('12', '22')//on évite de tout traiter


 
Quant à la performance :  
Si tu ne traites que les cas nécessaires pour ton update, autant faire tout en 1, dirais-je, mais... à tester !


Message édité par deliriumtremens le 15-02-2012 à 06:58:40
n°2126621
Oliiii
Posté le 15-02-2012 à 11:05:51  profilanswer
 

Si tu en as beaucoup tu peux aussi remplire une table avec les valeures AVANT et APRES, faire un JOIN sur la valeur avant et un SET = APRES.

n°2126684
MEI
|DarthPingoo(tm)|
Posté le 15-02-2012 à 17:39:17  profilanswer
 

Au lieu de faire des requêtes compliquées, franchement, prépare une requête avec bind variables et ensuite exécuter les différentes combinaison de valeur ne sera pas trop pénalisant hein...


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2126790
fred777888​999
Posté le 16-02-2012 à 11:33:28  profilanswer
 

@delirium : ta premiere syntaxe est ansi et reconnue par oracle, sans doutes aussi mysql et db2. Le probleme ne se pose pas trop au niveau perf, mais cela te permet surtout d'eviter d'ouvrir une transaction si tes MAJ doivent s'effectuer ensembles.  
Il n'y a sinon aucun avantage a faire les MAJ en un requete complexe au lieu de 2 simples ;)


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

  update plusieurs condition

 

Sujets relatifs
[BATCH] Condition 2 argumentsProblème avec le fonction Match
[MySQL] Besoin d'aide pour une requete UPDATEecriture sur plusieurs xls
Lancer processus sous conditionZone d'impression sous condition
Batch Ms-dos - For - plusieurs instruction[HTML] ne pas mettre de h1 (ou en mettre plusieurs)
[PHP] tri sur plusieurs array multidimentionels[MySQL] update une partie d'un champ ?
Plus de sujets relatifs à : update plusieurs condition


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