как обновить один столбец записи в true, в остальном false - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь обновить столбец в записи до 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 голосов
/ 21 декабря 2018

Я бы написал это как:

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 значений).

0 голосов
/ 21 декабря 2018

Вы можете использовать выражение case:

UPDATE my_table
SET    is_group_active = CASE group_id WHEN 2 THEN 1 ELSE 0 END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...