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, который не допускает "постоянные" подзапросы.)