我正在尝试从 1 个 sql 查询执行多个插入。分解我在这里要做的是数据库结构:
links:
- id // uuid_generate_v4()
- hash
permissions:
- id // uuid_generate_v4()
- name
photos:
- id // uuid_generate_v4()
- url
link_permissions:
- link_id
- permission_id
link_photo:
- link_id
- photo_id
现在,每当我插入一个链接时,我还需要插入它的权限和照片。这是我到目前为止尝试过的 sql 查询。
WITH link as (
INSERT INTO links(hash) VALUES ('my-random-hash')
RETURNING *
)
INSERT INTO link_photo(link_id, photo_id)
VALUES ((select link.id from link), '095ccacf-ebc1-4991-8ab0-cac13dac02b7'),
INSERT INTO link_permission(link_id, permission_id)
VALUES ((select link.id from link), '506f3302-fe9f-4982-8439-d6781f646d01')
和
WITH link as (
INSERT INTO links(hash) VALUES ('my-random-hash')
RETURNING *
)
(INSERT INTO link_photo(link_id, photo_id)
VALUES ((select link.id from link), '095ccacf-ebc1-4991-8ab0-cac13dac02b7')),
INSERT INTO link_permission(link_id, permission_id)
VALUES ((select link.id from link), '506f3302-fe9f-4982-8439-d6781f646d01')
我将如何编写此查询?
最佳答案
只需将第二个插入到另一个 CTE 中:
WITH link as (
INSERT INTO links(hash) VALUES ('my-random-hash')
RETURNING *
) , lp as (
INSERT INTO link_photo(link_id, photo_id)
VALUES ((select link.id from link), '095ccacf-ebc1-4991-8ab0-cac13dac02b7')
)
INSERT INTO link_permission(link_id, permission_id)
VALUES ((select link.id from link), '506f3302-fe9f-4982-8439-d6781f646d01');
或者,不要使用 values
,这会使查询更容易阅读(我认为)
WITH link as (
INSERT INTO links(hash) VALUES ('my-random-hash')
RETURNING *
) , lp as (
INSERT INTO link_photo(link_id, photo_id)
select id, '095ccacf-ebc1-4991-8ab0-cac13dac02b7'
from link
)
INSERT INTO link_permission(link_id, permission_id)
select id, '506f3302-fe9f-4982-8439-d6781f646d01'
from link;
关于sql - 多次插入 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49370462/