DB2如何基于2个其他表将值插入表中?
我有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))
您可以使用插入SELECT语句与联接reference
和project
查询:
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)
谢谢!这很好,并允许我为所有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
@Nataly不知道我的理解你完全,但如果我这样做,这听起来像你需要另一个'加入'。看到我编辑的答案。 – Mureinik
不幸的是,这是我最终尝试,但db2不允许这样做。 – Nataly
我不得不用一种变通方法,因为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)
你的解释和样品SQL的PK这2个组合不匹配。您能否请分享适当的表格结构,一些示例数据以及您希望从该数据中获得的结果? – Mureinik
@Mureinik完成!我的坏.. – Nataly
@Mureinik见下面 – Nataly