use*_*283 5 sql postgresql common-table-expression
如何多次使用我的第一个 with 语句?使用像下面这样的代码,除了紧随其后的语句之外,我不能将它用于任何其他语句。
WITH insertuser AS (
INSERT INTO
zorro.user (username, firstname, lastname,
accountstatus, roles, creationdatetime)
VALUES('test', 'test', 'test',
'test', 'test', current_timestamp)
RETURNING id
)
INSERT INTO
zorro.email (address, confirmed, count, user_id)
SELECT 'test', false, 1, id
FROM insertuser;
INSERT INTO
zorro.password (hash, count, user_id)
SELECT 'test', 1, id
FROM insertuser;
INSERT INTO
zorro.phone_number (number, confirmed, count, user_id)
SELECT 'test', false, 1, id
FROM insertuser;
INSERT INTO
zorro.Question (text, answer, count, user_id)
SELECT 'test', 'test', 1, id
FROM insertuser;
Run Code Online (Sandbox Code Playgroud)
我在第 19 行出现 sql 错误,靠近代码中的第二个“FROM insertuser”。
我认为你可以使用一系列公用表表达式:
WITH insertuser AS (
INSERT INTO zorro.user (username, firstname, lastname, accountstatus, roles, creationdatetime)
VALUES('test', 'test', 'test', 'test', 'test', current_timestamp)
RETURNING id
),
em as (
INSERT INTO zorro.email (address, confirmed, count, user_id)
SELECT 'test', false, 1, id
FROM insertuser
RETURNING *
),
p as (
INSERT INTO zorro.password (hash, count, user_id)
SELECT 'test', 1, id
FROM insertuser
RETURNING *
),
pn as (
INSERT INTO zorro.phone_number (number, confirmed, count, user_id)
SELECT 'test', false, 1, id
FROM insertuser
RETURNING *
)
INSERT INTO zorro.Question (text, answer, count, user_id)
SELECT 'test', 'test', 1, id
FROM insertuser;
Run Code Online (Sandbox Code Playgroud)
我不能 100% 确定RETURNINGCTE 是否需要该条款。