Функция UPDATE в PostgreSQL не принимает вложенный запрос?

Функция 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 не принимает прямо вложенные запросы, существуют способы обновления данных с использованием значений из других таблиц или результатов других запросов.