Postgres插入select和values

时间:2015-02-17 17:16:59

标签: sql postgresql transactions

所以我试图将一个值插入到一个辅助表中,从插入中获取返回的id,并将它与一些准备好的语句中的一些值一起使用我写的。返回第一个statement(table2)是第一个表中外键列的id。  我想最终得到表1的id。像:

WITH table2ID AS
(
INSERT INTO table2 (value) VALUES ('somevalue') RETURNING id;
)
INSERT INTO table1(table2returnvalue,othervalue) VALUES
(table2ID 'val2') RETURNING id

我可以看到我可能也需要一个交易,因为如果table1的语句由于某种原因失败,我不希望在table2中出现孤立。

你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

要使用CTE来执行此操作,通常最容易返回整行(从table2输出)并在第二次插入查询中引用它。

WITH table2 AS
(
    INSERT INTO table2 ( value )
    VALUES ( 'somevalue' )
    RETURNING table2.*;
)
INSERT INTO table1 ( table2returnvalue, othervalue )
SELECT table2.id, 'val2'
FROM table2
RETURNING table1.id

答案 1 :(得分:1)

我认为你正在寻找这样的东西:

WITH table2ID AS
(
  INSERT INTO table2 (value) VALUES ('somevalue') RETURNING id;
)
INSERT INTO table1(table2returnvalue,othervalue) 
SELECT table2ID.id, 'val2' FROM table2ID;