如何将一个记录列更新为true,否则为false

时间:2018-12-21 14:58:11

标签: sql sql-server sql-update

我正在尝试将记录中的一列更新为true,以指示该记录是表中的活动记录。但是,通过更新此记录,然后必须将该列的所有其他记录更新为false。有一种方法可以在一个SQL语句中执行此操作吗?我可以在两个语句中做到这一点:

UPDATE My_Table
SET is_group_active = 0

UPDATE My_Table
SET is_group_active = 1
WHERE group_id = 2;

2 个答案:

答案 0 :(得分:6)

您可以使用case表达式:

UPDATE my_table
SET    is_group_active = CASE group_id WHEN 2 THEN 1 ELSE 0 END;

答案 1 :(得分:2)

我会这样写:

UPDATE t
    SET is_group_active = (CASE group_id WHEN 2 THEN 1 ELSE 0 END)
    WHERE is_group_active <> (CASE group_id WHEN 2 THEN 1 ELSE 0 END);

或者也许:

UPDATE t
    SET is_group_active = (CASE group_id WHEN 2 THEN 1 ELSE 0 END)
    WHERE is_group_active = 1 OR group_id = 2

无需更新已经具有正确值的行。 (注意:如果is_group_active可以接受NULL个值,则逻辑会稍微复杂一些。