Как обновить два столбца в одном запросе, один из другого? - PullRequest
0 голосов
/ 10 апреля 2020

Можно ли обновить два столбца, один из которых по значению другого, в одном запросе PostgreSQL?

Позвольте мне объяснить это. Если бы у меня была эта таблица:

CREATE TABLE test
(
  id bigint,
  val1 integer,
  val2 integer
);

и вставьте туда строку:

INSERT INTO test (id, val1, val2) VALUES (1, NULL, NULL);

Тогда мне нужно обновить val1 и val2 столбцы. Для val1 я устанавливаю явное значение, для val2 я использую val1 значение столбца.

UPDATE test
SET 
  val1 = 1,
  val2 = val1
WHERE id = 1

Я ожидаю установить val1 на 1 и val2 на 1 в качестве ссылки просто установить val1. Однако после этого обновления я получаю 1 в val1 столбце и NULL в val2.

Конечно, это не реальный пример из жизни. В моей реальной задаче я установил значение val1 с несколькими условиями, поэтому я не хотел бы снова копировать часть из них в значение val2.

Возможно ли сделать это так, как я ожидаю в одном запросе

1 Ответ

1 голос
/ 10 апреля 2020

Если вы не хотите повторять условия, вы можете определить их в запросе. Например:

UPDATE test
    SET val1 = v.new_val1,
        val2 = v.new_val1
    FROM (VALUES (1)) v(new_val1)
    WHERE id = 1;
...