2014-11-04 104 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