我试图在单行中插入user和他的多个用户角色+返回已创建用户的id。我使用了以下查询:
WITH inserted_user as (
insert into "user" (username, password, nickname, account_non_expired,
account_non_locked, credentials_non_expired, enabled)
values ('username', 'password-hash', 'nickanme', true, true, true, true)
returning id
)
insert into user_role values
((select id
from inserted_user), 2),
((select id
from inserted_user), 3),
((select id
from inserted_user), 4)
returning user_id;我的问题是,在我的结果中,我看到了3行具有相同ID的行(这对我的java应用程序来说是不好的,因为它需要一个号码)。我不知道如何编辑这个来得到我的结果。我试着把它包装到另一个select +许多其他或多或少愚蠢的东西中,但都没有用。你能帮帮我吗?
发布于 2018-07-09 09:56:30
对第二个INSERT和SELECT DISTINCT user_id FROM使用另一个CTE。在新的CTE做一个INSERT ... SELECT FROM,旧的CTE。
WITH inserted_user
AS
(
INSERT INTO "user"
(username,
password,
nickname,
account_non_expired,
account_non_locked,
credentials_non_expired,
enabled)
VALUES ('username',
'password-hash',
'nickanme',
true,
true,
true,
true)
RETURNING id
),
inserted_user_role
AS
(
INSERT INTO user_role
SELECT iu.id,
gs.n
FROM inserted_user iu
CROSS JOIN generate_series(2, 4) gs(n)
RETURNING user_id
)
SELECT DISTINCT
user_id
FROM inserted_user_role;https://dba.stackexchange.com/questions/211656
复制相似问题