Postgres: объединение запросов на обновление в один запрос в иерархической таблице - PullRequest
0 голосов
/ 04 мая 2018

У меня есть иерархическая таблица, где каждая строка содержит идентификатор различных родителей. Обновление строки (установите ее как активную) означает, что мне нужно обновить каждого родителя этой строки. Как я могу объединить эти запросы в один запрос? В настоящее время я использую это решение, которое не очень приятно. Я думаю, это можно сделать с помощью рекурсивного CTE, но я не могу найти правильный путь здесь. заранее спасибо!

update areas set active = true  where id = 1000;
update areas set active = true  where id = (select parent1 from areas where id = 1000);
update areas set active = true  where id = (select parent2 from areas where id = 1000);
update areas set active = true  where id = (select parent3 from areas where id = 1000);
update areas set active = true  where id = (select parent4 from areas where id = 1000);

1 Ответ

0 голосов
/ 04 мая 2018

По сути, вы говорите, что set active = true, если это либо сам узел, parent1, parent2, parent3 или parent4, которые присутствуют при запросе узла по id. Поэтому все, что вам нужно - это собрать их в массив.

UPDATE
  areas
SET
  active = True
WHERE
  id = ANY(
    SELECT
      UNNEST(ARRAY[id, parent1, parent2, parent3, parent4])
    FROM
      areas
    WHERE
      id = 1000
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...