【问题标题】:Postgres insert with select and values带有选择和值的 Postgres 插入
【发布时间】:2015-02-18 01:47:32
【问题描述】:

所以我试图将一个值插入到辅助表中,从插入中获取返回的 id,并将其与我正在编写的准备好的语句中的一些值一起使用。第一个语句的返回 (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 中的隔离。

你能帮忙吗?

【问题讨论】:

  • 您的问题到底是什么?单个语句(这就是您所拥有的)始终是原子的。它要么完全成功,要么完全失败。
  • 正如我所指定的,我正在尝试使用先前插入的返回值作为下一个插入语句的值

标签: sql postgresql transactions


【解决方案1】:

要使用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

【讨论】:

  • 谢谢,帮了大忙!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多