使用case语句更新多个变量

时间:2018-03-27 06:32:22

标签: mysql sql

我在 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';

我如何实现我想要的目标?

2 个答案:

答案 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'

感谢。