2016-04-03 70 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)