2016-04-03 104 views
0

我有3個表:DB2如何基於2個其他表將值插入表中?

表A:obj_1(VARCHAR),RLT(VARCHAR),obj_2(VARCHAR)

表B:R_ID(INT),r_obj(VARCHAR)

表C :obj1(int),action(varchar),obj2(int)

我需要插入到表C中,因此它是表A的精確副本,除了obj_1和obj_2名稱外,它使用參考編號對於表C中的那個對象(r_id)。

INSERT into tablec (obj1, action, obj2) ((select r_id from tableb, tablea 
where tablea.obj_1 = tableb.r_obj), (select rlt from tablea), (select r_id  
from tableb, tablea where tablea.obj_1 = tableb.r_obj)) 
+0

你的解釋和樣品SQL的PK這2個組合不匹配。您能否請分享適當的表格結構,一些示例數據以及您希望從該數據中獲得的結果? – Mureinik

+0

@Mureinik完成!我的壞.. – Nataly

+0

@Mureinik見下面 – Nataly

回答

0

您可以使用插入SELECT語句與聯接referenceproject查詢:

INSERT INTO tablec (obj1, action, obj2) 
(SELECT b1.r_id, a.action, b2.r_id 
FROM tablea a 
JOIN tableb b1 ON a.obj1 = b1.r_obj 
JOIN tableb b2 ON a.obj2 = b2.r_obj) 
+0

謝謝!這很好,並允許我爲所有3列添加多行。但是,由於ON子句僅針對obj_1設置,因此在tablec中,obj_1&obj_2是彼此的副本,但實際上,我需要爲a.obj_2獲取正確的b.r_id,是否有辦法做到這一點? 'INSERT INTO表C(OBJ1,動作,OBJ2) (選擇b.r_id,a.rlt,b.r_id FROM表A表B加入ON = a.obj1 b.r_obj)' – Nataly

+0

@Nataly不知道我的理解你完全,但如果我這樣做,這聽起來像你需要另一個'加入'。看到我編輯的答案。 – Mureinik

+0

不幸的是,這是我最終嘗試,但db2不允許這樣做。 – Nataly

0

我不得不用一種變通方法,因爲DB2具有一定的侷限性: 我用了2點臨時意見墊腳石我的目標。

我做了2聯接分別需要:

create view temp1 (a, b) as (select tablea.p_id, tableb.r_id from tablea 
tableb where tablea.obj_1 = tableb.r_obj) 

create view temp2 (c, d, rlt) as (select tablea.p_id, tableb.r_id, tablea.rlt 
from tablea, tableb where tablea.obj_2 = tableb.r_obj) 

然後我用一個刀片statament基於從表A

INSERT INTO final (obj_1, rlt, obj_2) 
(select temp1.b, temp2.rlt, temp2.d from temp1 join temp2 on temp1.a = temp2.c)