PostgreSQL не примет INSERT со значениями и FROM?

Я пытаюсь получить значение, полученное из SELECT, а потом INSERT это значение вместе с другими значениями в другую таблицу:

WITH data AS (SELECT name FROM programmes WHERE id = $1)
INSERT INTO purchases (name, other_details, some_more_stuff)
VALUES (data.name, $2, $3) FROM data;

Но PostgreSQL дает 42601 ERROR: syntax error at or near "FROM" LINE 1: ...(data.name, $2, $3) FROM data,

INSERT Документация не дает никаких примеров VALUES а также FROM вместе в одном запросе. Каков правильный синтаксис для этого вида запроса? Или нельзя так сформулировать мой запрос?

2 ответа

Решение

Вам не нужно общее табличное выражение.

INSERT INTO purchases (name, other_details, some_more_stuff) 
SELECT name, $2, $3
FROM programmes 
WHERE id = $1

Синтаксис, который вы пытались применить, неверен. Вы не можете использовать столбцы из таблицы или запроса в списке VALUES, потому что список должен содержать только константы. Из документации (выделение добавлено):

VALUES предоставляет способ генерации "постоянной таблицы", которую можно использовать в запросе без необходимости фактически создавать и заполнять таблицу на диске.

Смотрите также Синтаксис VALUES.

Использование insert . . . select:

WITH data AS (
      SELECT name
      FROM programmes 
      WHERE id = $1
    )
INSERT INTO purchases (name, other_details, some_more_stuff) 
    SELECT data.name, $2, $3
    FROM data;

Это не просто Postgres. Вот как работает SQL. Если честно, я не думаю, что учиться insert . . . values Это особенно полезно, потому что вы можете делать все, и больше, используя insert . . . select, (Ну, если вы не используете MS Access, который не допускает "постоянные" подзапросы.)

Другие вопросы по тегам