MYSQL更新,如果

MYSQL更新,如果,mysql,sql-update,Mysql,Sql Update,需要创建句子更新时,需要以下内容: 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, mv

需要创建句子更新时,需要以下内容:

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

您可能希望将其分成多个updates语句,并在每个语句中使用
WHERE
子句来强制执行您的条件

由于执行顺序很重要,因此您应该小心如何实现这一点。例如,如果您有一行,其中
lp=1
mpe=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)

请先用条件重新表述一下。我通常会建议您使用
案例
,但可能可以这样做:

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)
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),
          . . .

是的,我知道这个句子是这样工作的,但我真的需要用if或case来做这个查询