【问题标题】:RETURNING in INSERT INTO statement with a SELECT statement在带有 SELECT 语句的 INSERT INTO 语句中返回
【发布时间】:2019-07-03 12:59:14
【问题描述】:

我正在向表中插入数据并希望返回插入的数据。插入的数据包含外键。我想通过外键的连接来获取整个数据。

我尝试在 RETURNING 中放置一个 SELECT,但没有成功。这甚至可能吗,还是我只需要在插入数据后进行另一个查询?

插入语句:

INSERT INTO someTable (col1, col2, col3, foreign_id) 
VALUES  ('value1', 'value2', 'value3', 1);

所以在这种情况下,我能否有一个基本上会给我的 RETURNING:

SELECT someTable.*, foreignTable.* 
FROM someTable 
   JOIN foreignTable ON someTable.foreign_id = foreignTable.id;

【问题讨论】:

    标签: postgresql join sql-insert


    【解决方案1】:

    demo:db<>fiddle

    您可以为此使用 CTE:

    WITH inserting AS (
        INSERT INTO...
        RETURNING <new data>
    )
    SELECT i.*, ft.*
    FROM inserting i JOIN foreign_table ft ...
    

    在这种情况下,INSERT 语句将被执行。 SELECT 语句将在此之后执行。这可以引用插入的数据。

    【讨论】:

      【解决方案2】:

      您可以为此使用CTE

      with new_row as (
        INSERT INTO some_table (col1, col2, col3, foreign_id) 
        VALUES  ('value1', 'value2', 'value3', 1)
        returning *
      )
      SELECT new_row.*, ft.* 
      FROM new_row
         JOIN foreign_table ft ON new_row.foreign_id = ft.id;
      

      【讨论】:

      • 您在 select 语句中引用了 CTE 的结果。但这没有任何回报。您需要 RETURNING 子句
      • @S-Man 和 a_horse_with_no_name,谢谢你们的回答,我希望我能同时接受,但 S-Man 的速度稍快,所以我接受了他的。不过谢谢你们,它有效!
      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 2012-10-18
      • 2021-01-19
      • 2016-07-02
      相关资源
      最近更新 更多