【问题标题】:Return value cross join返回值交叉连接
【发布时间】:2014-03-13 18:45:25
【问题描述】:

我有两张表,一张是table #1,包含用户信息、邮箱、密码等。

另一个表#2包含项目信息

当我插入table #2,然后使用返回语句来收集插入的内容(返回自动值以及其他信息)时,我还需要从table #1 返回信息。

(请原谅语法)

示例:

insert into table #1(item,user) values('this item','the user') 
returning *, select * from table 2 where table #1.user = table #2.user)

换句话说,在插入之后我需要返回插入的值,以及插入数据的用户的信息。

这可能吗?

我唯一想到的是在返回子句中使用一大堆子查询语句。必须有更好的方法。

【问题讨论】:

    标签: sql postgresql insert sql-insert


    【解决方案1】:

    我建议data-modifying CTE(Postgres 9.1 或更高版本):

    WITH ins AS (
       INSERT INTO tbl1(item, usr)
       VALUES('this item', 'the user') 
       RETURNING usr
       )
    SELECT t2.*
    FROM   ins
    JOIN   tbl2 t2 USING (usr)
    

    使用列名usr 而不是user,这是一个保留字。

    【讨论】:

      【解决方案2】:

      使用子查询。

      简单演示:http://sqlfiddle.com/#!15/bcc0d/3

      insert into table2( userid, some_column )
      values( 2, 'some data' )
      returning 
          userid, 
          some_column,
          ( SELECT username FROM table1
            WHERE table1.userid = table2.userid
           );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        • 2018-10-12
        • 2017-12-22
        • 2020-02-19
        • 2013-11-11
        • 2012-10-27
        相关资源
        最近更新 更多