Функция UPDATE в PostgreSQL действительно не принимает прямо вложенные подзапросы в синтаксисе UPDATE. Однако, это не значит, что нельзя выполнить операцию UPDATE, используя данные из других таблиц или результаты других запросов.
Вместо вложенного запроса, можно использовать подзапрос в предложении FROM или в предложении WHERE для обновления данных с использованием значений из других таблиц. Давайте рассмотрим примеры.
Первый вариант - использование предложения FROM с подзапросом. В данном случае, мы можем выбрать данные из другой таблицы и использовать их для обновления с помощью конструкции JOIN. Например:
UPDATE table1 SET column1 = new_value FROM table2 WHERE table1.id = table2.id AND table2.column2 = 'some condition';
В данном примере, мы обновляем значения в столбце column1
таблицы table1
с помощью значений из столбца column2
таблицы table2
, при условии, что id
в обоих таблицах совпадает и столбец column2
удовлетворяет некоторому условию.
Второй вариант - использование подзапроса в предложении WHERE. В этом случае, подзапрос вычисляется первым и его результат используется для выбора строк, которые будут обновлены. Например:
UPDATE table1 SET column1 = new_value WHERE table1.id IN ( SELECT id FROM table2 WHERE column2 = 'some condition' );
В этом примере, мы выбираем все значения столбца id
из table2
, где столбец column2
удовлетворяет некоторому условию, и затем обновляем значения столбца column1
в table1
, где id
находится в этом подзапросе.
Таким образом, хотя функция UPDATE в PostgreSQL не принимает прямо вложенные запросы, существуют способы обновления данных с использованием значений из других таблиц или результатов других запросов.