Обновление нескольких строк условным предложением где в Postgres? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь обновить несколько строк в одном запросе, так как мне нужно обновить несколько строк одновременно. В моем запросе есть предложение where, которое применяется только к определенным строкам.

Например, у меня следующий запрос:

update mytable as m set
    column_a = c.column_a,
    column_b = c.column_b
from (values
    (1, 12, 6, TRUE),
    (2, 1, 45, FALSE),
    (3, 56, 3, TRUE)
) as c(id, column_a, column_b, additional_condition)
where c.id = m.id
     and CASE c.additional_condition when TRUE m.status != ALL(array['active', 'inactive']) end;

Последняя строка в предложении where(m.status != ALL(array['active', 'inactive'])) следует применять только к строкам, которые имеют TRUE в значении c.additional_condition. В противном случае условие не должно применяться.

Возможно ли достичь этого в Postgres?

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Я думаю, что это то, что вы хотите:

and CASE  
  when c.additional_condition THEN m.status != ALL(array['active', 'inactive']) 
  else TRUE
end
1 голос
/ 29 сентября 2019

Я думаю, что вам нужна логика:

where c.id = m.id and
      ( (not c.additional_condition) and orm.status = 'active' )

Вы можете использовать in или массивы для нескольких значений:

where c.id = m.id and
      ( (not c.additional_condition) and orm.status not in ( 'active', 'inacctive') )

Я не вижу конкретного значения дляиспользуйте массивы, если только вы не передаете значение в виде массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...