Dan*_*ugg 12 mysql conditional case
我试图在可能的情况下在单个查询中更新一组记录(boolean字段).
输入来自分页无线电控件,因此给定POST的页面的ID 值为a true或falsevalue.
我试图朝这个方向前进:
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)
您可以避免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)
| 归档时间: |
|
| 查看次数: |
30077 次 |
| 最近记录: |