一个查询中的MySQL更新条件(UPDATE,SET&CASE)

Dan*_*ugg 12 mysql conditional case

我试图在可能的情况下在单个查询中更新一组记录(boolean字段).

输入来自分页无线电控件,因此给定POST的页面的ID 值为a truefalsevalue.

我试图朝这个方向前进:

UPDATE my_table
    SET field = CASE
        WHEN id IN (/* true ids */) THEN TRUE
        WHEN id IN (/* false ids */) THEN FALSE
    END
Run Code Online (Sandbox Code Playgroud)

但是这导致"true id"行被更新为true,并且所有其他行都被更新为false.

我假设我已经做了一些严重的语法错误,或者说我正在接近这个错误.

有关解决方案的任何想法?

Ica*_*rus 24

你不忘记在案件陈述中做"ELSE"吗?

UPDATE my_table
    SET field = CASE
        WHEN id IN (/* true ids */) THEN TRUE
        WHEN id IN (/* false ids */) THEN FALSE
        ELSE field=field 
    END
Run Code Online (Sandbox Code Playgroud)

没有ELSE,我假设评估链在最后一个WHEN处停止并执行该更新.此外,您不限制您尝试更新的行; 如果你不做ELSE,你至少应该告诉更新只更新你想要的行而不是所有的行(正如你所做的那样).查看下面的WHERE子句:

  UPDATE my_table
        SET field = CASE
            WHEN id IN (/* true ids */) THEN TRUE
            WHEN id IN (/* false ids */) THEN FALSE
        END
  WHERE id in (true ids + false_ids)
Run Code Online (Sandbox Code Playgroud)


Nic*_*ssu 5

您可以避免field = field

update my_table
    set field = case
        when id in (....) then true
        when id in (...) then false
        else field
    end
Run Code Online (Sandbox Code Playgroud)