2017-10-04 4 views
4

Je ne suis pas très bon en SQL et j'ai essayé quelques petites choses. Quelle serait la meilleure façon de combiner ces 5 instructions de mise à jour en une seule instruction en considérant performance du code? Cela serait une aide précieuse. Merci beaucoup!Fusion de plusieurs instructions de mise à jour sql (Oracle)

code:

----------------1 

Update main_table 
set a = (case 
..some code.. end) 
where condition_2; 

----------------2 

Update main_table 
set b = (case 
..some code.. end) 
where condition_2 

----------------3 

Update main_table 
set c = (select x from sec_table where conditon_1) 
where condition_2 

----------------4 

Update main_table 
set d = (select y from sec_table where conditon_1) 
where condition_2 

----------------5 

Update main_table 
set e = (select z from sec_table where conditon_1) 
where condition_2 
+0

Je l'ai déjà essayé, mais je recherche de meilleures performances: UPDATE main_table SET \t a = (CASE certains codes END), \t b = (CASE du code END), c = (SELECT x DE sec_table OU condition_2), d = (SELECT y DE sec_table OÙ condition_2), e = (SELECT z FROM sec_table WHERE condition_2) WHERE condition_1; – Vidit

Répondre

3

Je pense que vous pouvez écrire ce que:

update main_table 
    set a = (case ..some code.. end), 
     b = (case ..some code.. end), 
     (c, d, e) = (select x, y, z from sec_table where conditon_1) 
where condition_2 
+0

J'ai essayé ceci mais ---- (c, d, e) = (sélectionnez x, y, z de sec_table où conditon_1) ---- cette partie de code m'a donné quelques résultats inattendus. – Vidit

+0

Je crois que je fais quelque chose de mal avec la condition dans la clause where – Vidit

0

vous pouvez effectuer que sur une seule déclaration de mise à jour. En fonction de la sous-requête que vous faites sur ce sec_table, vous pouvez même accorder un peu plus.

update main_table set a= (case ..some code.. end), 
         b= (case ..some code.. end), 
         c= (select x from sec_table where conditon_1),  
         d= (select y from sec_table where conditon_1), 
         e= (select z from sec_table where conditon_1) 
where condition_2 
2

Vous pouvez combiner votre mise à jour des requêtes et utiliser une seule requête comme ceci:

UPDATE main_table 
    SET a = (case ..some code.. end) , 
     b = (case ..some code.. end) ... /*the rest of your sets*/ 
    where /*add your conditions*/