2014-11-04 168 views
0

需要创建句子更新MYSQL更新需要的是这样的:与if语句

update table1 
set lp=1, mpe=0, pe=0, f2_lp=0, f1_lp=0, mvlp=0 if (lp=1) 
set lp=0, mpe=1, pe=0, f2_lp=0, f1_lp=0, mvlp=0 if (mpe=1) 
set lp=0, mpe=0, pe=1, f2_lp=0, f1_lp=0, mvlp=0 if (pe=1) 
set lp=0, mpe=0, pe=0, f2_lp=1, f1_lp=0, mvlp=0 if (f2_lp=1) 
set lp=0, mpe=0, pe=0, f2_lp=0, f1_lp=1, mvlp=0 if (f1_lp=1) 
set lp=0, mpe=0, pe=0, f2_lp=0, f1_lp=0, mvlp=1 if (mvpl=1) 

回答

1

首先就改写本,随病情。我通常建议您使用case,但也许可以做你想做的是这样的:

update table1 
    set lp = (lp = 1), 
     mp2 = (mp2 = 1), 
     mpe = (mpe = 1), 
     f2_lp = (f2_lp = 1), 
     f1_lp = (f1_lp = 1), 
     mvlp = (mvlp= 1); 

这不正是你想要什么。对于你所描述的内容:

update table1 
    set lp = (case when lp = 1 then 1 else 0 end), 
     mp2 = (case when lp = 1 then 0 when mp2 = 1 then 1 else 0 end), 
     mpe = (case when lp = 1 or mp2 = 1 then 0 when mpe = 1 then 1 else 0 end), 
     f2_lp = (case when lp = 1 or mp2 = 1 or mpe = 1 then 0 when f2_lp = 1 then 1 else 0 end), 
      . . . 
0

你可能要分开这到多个更新语句,并使用WHERE子句中的每一个执行你的标准。

由于执行顺序非常重要,因此您应该小心如何实施。例如,如果你有一行lp=1mpe=1你想要做什么?你想设置lp=0还是设置mpe=0

下面是基于您的代码段,让你一个例子开始:

update table1 
set lp=1, mpe=0, pe=0, f2_lp=0, f1_lp=0, mvlp=0 
where (lp=1) 

update table1 
set lp=0, mpe=1, pe=0, f2_lp=0, f1_lp=0, mvlp=0 
where (mpe=1) 

update table1 
set lp=0, mpe=0, pe=1, f2_lp=0, f1_lp=0, mvlp=0 
where (pe=1) 

update table1 
set lp=0, mpe=0, pe=0, f2_lp=1, f1_lp=0, mvlp=0 
where (f2_lp=1) 

update table1 
set lp=0, mpe=0, pe=0, f2_lp=0, f1_lp=1, mvlp=0 
where (f1_lp=1) 

update table1 
set lp=0, mpe=0, pe=0, f2_lp=0, f1_lp=0, mvlp=1 
where (mvpl=1) 
+0

是的,我知道这个句子是这样工作的,但我真的需要用句子做这个查询if或case – vrvictor 2014-11-04 18:03:08