update plusieurs condition

update plusieurs condition - SQL/NoSQL - Programmation

Marsh Posté le 14-02-2012 à 17:47:09    

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

Reply

Marsh Posté le 14-02-2012 à 17:47:09   

Reply

Marsh Posté le 14-02-2012 à 22:46:54    

donny3 a écrit :

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


Salut
Non, ce n'est pas possible

Reply

Marsh Posté le 15-02-2012 à 06:46:12    

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
Reply

Marsh Posté le 15-02-2012 à 11:05:51    

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.

Reply

Marsh Posté le 15-02-2012 à 17:39:17    

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

Marsh Posté le 16-02-2012 à 11:33:28    

@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 ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed