2014-03-13 136 views
1

我有兩個表,一個是table #1包含用戶信息,電子郵件,密碼等。返回值交叉連接

其他表#2中包含項目信息

當我做一個INSERT INTO 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) 
換句話說

,插入後,我需要返回插入值,以及有關誰插入數據的用戶的信息。

這可能嗎?

我想出的唯一辦法是在返回子句中使用一大堆子查詢語句。一定有更好的方法。

回答

1

使用子查詢。

簡單的演示: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 
    ); 
4

我建議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,這是一個保留字工作。