2017-10-04 71 views
4

我不是很擅长SQL,我已经尝试了一些东西。考虑到性能的代码,将这5条更新语句合并为一条语句的最佳方法是什么?会是一个很大的帮助。非常感谢!合并多个SQL更新语句(甲骨文)

代码:

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

我已经尝试过这一点,但我m寻找更好的表现: UPDATE main_table SET \t a =(CASE 部分代码 END), \t B =(CASE 一些代码 END), C = (选择x FROM sec_table WHERE condition_2) d = (选择Y FROM sec_table WHERE condition_2) e = (SELECT z FROM sec_table where condition_2) WHERE condition_1; – Vidit

回答

3

我认为你可以为这样写:

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

我试过这个,但是----(c,d,e)=(从sec_table中选择x,y,z,其中conditon_1)----这部分代码给了我一些意想不到的结果。 – Vidit

+0

我相信我在where子句中的条件做错了什么 – Vidit

0

,你只能在一个update语句执行。根据你在sec_table上创建的子查询,你甚至可以调整更多。

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

你可以结合你的更新查询,并且只使用一个像这样的查询:

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