2016-04-03 7 views
0

Iは、3つのテーブルを持っています:obj_1とobj_2の名前の代わりに参照番号を使用する点を除いて、表Cと完全に同じになるように、表Cに挿入する必要があります。表Cのそのオブジェクト(r_id)に対して。DB2 2つのテーブルに基づいてテーブルに値を挿入する方法は?</p> <p>表A:obj_1(VARCHAR)、RLT(VARCHAR)、obj_2の(VARCHAR)</p> <p>表B:R_ID(INT)、r_obj(VARCHAR)</p> <p>表C

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を結合するために1つのインサートstatamentを使用しました一致しません。適切なテーブルの構造、いくつかのサンプルデータ、そのデータから得たい結果を共有してください。 – Mureinik

+0

@ムレイニクしました!私の悪い.. – Nataly

+0

@ムレイニクは以下を参照 – Nataly

答えて

0

あなたがreferenceprojectを結合するクエリを挿入-select文を使用することができます。

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も取得する必要があります。 ? '表C。INSERT INTO(OBJ1、アクション、OBJ2) (b.r_idを選択し、a.rlt、a.obj1 = b.r_obj ON TableBの に参加TABLEA FROM をb.r_id)私は理解' – Nataly

+0

@Natalyわかりませんあなたが完全に、しかし、もし私がしたら、あなたは別の 'join'が必要なように思えます。私の編集された答えを見てください。 – 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) 

が、私はTABLEA

INSERT INTO final (obj_1, rlt, obj_2) 
(select temp1.b, temp2.rlt, temp2.d from temp1 join temp2 on temp1.a = temp2.c) 
関連する問題