Ada*_*dam 8 sql postgresql variables primary-key common-table-expression
在PostgreSQL中,可以RETURNING在INSERT语句的末尾放置,例如,当该值由SERIAL类型自动设置时,返回行的主键值.
问题:
如何将此值存储在可用于将值插入其他表的变量中?
编辑:
请注意,我想将生成的id插入到多个表中.id据我所知,一个条款只对单个插入有用.我认为这可能必须在PHP中完成.
这实际上是糟糕设计的结果; 如果没有自然键,除非主键上有句柄,否则很难获取唯一的行; 选择的答案反映了所提供的最佳答案,但如果给出了更好的答案,我会选择.
Erw*_*ter 18
...可用于将值插入其他表中?
您甚至可以使用数据修改CTE在单个SQL语句中执行此操作:
WITH ins1 AS (
INSERT INTO tbl1(txt)
VALUES ('foo')
RETURNING tbl1_id
)
INSERT INTO tbl2(tbl1_id)
SELECT * FROM ins1
Run Code Online (Sandbox Code Playgroud)
需要PostgreSQL 9.1或更高版本.
您还可以在单个查询中插入多个表:
WITH ins1 AS (
INSERT INTO tbl1(txt)
VALUES ('bar')
RETURNING tbl1_id
)
, ins2 AS (
INSERT INTO tbl2(tbl1_id)
SELECT tbl1_id FROM ins1
)
INSERT INTO tbl3(tbl1_id)
SELECT tbl1_id FROM ins1;
Run Code Online (Sandbox Code Playgroud)