我在 my_table 中有两个变量:已更新和状态。每行都有一个唯一的 id 。对于给定的id ='abc123',如果'status'的值为'AAA',我想将 status 更改为'BBB'并将'updated'更改为NOW(),并保持不变否则。
我有一个错误的代码:
UPDATE my_table set status=(CASE when status='AAA' THEN 'BBB'),
SET updated=(CASE when status='AAA' THEN NOW()) where id='abc123';
我如何实现我想要的目标?
答案 0 :(得分:2)
您的语法略有偏差,将列分配给CASE
语句中的UPDATE
表达式没有任何问题。
UPDATE my_table
SET
status = CASE WHEN status = 'AAA' THEN 'BBB' ELSE status END,
updated = CASE WHEN status = 'AAA' THEN NOW() ELSE updated END
WHERE id = 'abc123';
我在ELSE
表达式中添加了CASE
逻辑,默认情况下,如果条件失败,则不会更改值。您可以删除它们,但非匹配项会收到NULL
值,可能不是您想要的值。
答案 1 :(得分:0)
这也可以。
UPDATE MY_TABLE
SET STATUS = 'BBB',UPDATED =NOW()
WHERE ID = 'ABC123' AND STATUS = 'AAA'
感谢。