SQL - Использование WITH для объявления переменной на INSERT INTO - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь использовать WITH для объявления переменной для запроса при выполнении INSERT INTO. Я слежу за { ссылка }, который дает следующий пример для запроса SELECT:

WITH myconstants (var1, var2) as (
   values (5, 'foo')
)
SELECT *
FROM somewhere, myconstants
WHERE something = var1
   OR something_else = var2;

Я безуспешно попробовал следующее:

playground> CREATE TABLE foo (id numeric)
CREATE TABLE

playground> WITH consts (x) AS (VALUES (2)) INSERT INTO foo VALUES (x)
column "x" does not exist
LINE 1: WITH consts (x) AS (VALUES (2)) INSERT INTO foo VALUES (x)
                                                                ^

playground> WITH consts (x) AS (VALUES (2)) INSERT INTO foo VALUES (consts.x)
missing FROM-clause entry for table "consts"
LINE 1: ...consts (x) AS (VALUES (2)) INSERT INTO foo VALUES (consts.x)
                                                              ^

playground> WITH consts (x) AS (VALUES (2)) INSERT INTO foo VALUES (consts.x) FROM consts
syntax error at or near "FROM"
LINE 1: ...AS (VALUES (2)) INSERT INTO foo VALUES (consts.x) FROM const...
                                                             ^

playground> WITH consts (x) AS (VALUES (2)) INSERT INTO foo FROM consts VALUES (consts.x)
syntax error at or near "FROM"
LINE 1: WITH consts (x) AS (VALUES (2)) INSERT INTO foo FROM consts ...
                                                        ^

Примечание. Я новичок в SQL, поэтому я стараюсь избегать решений, предполагающих использование PLPG SQL

1 Ответ

1 голос
/ 19 марта 2020

Я думаю, что вы хотите:

WITH consts (x) AS (VALUES (2)) INSERT INTO foo SELECT x FROM consts

То есть: предложение WITH создает производную таблицу , которую затем можно использовать в основном запросе; так что вам действительно нужно SELECT ... FROM общее табличное выражение.

...