2016-04-03 2 views
0

3 tablolar sahip : obj1 (int), eylem (varchar), obj2 (int)DB2 Değerler, diğer 2 tablo temelinde bir tabloya nasıl eklenir?</p> <p>Tablo A: obj_1 (varchar), rlt (varchar), obj_2 (varchar)</p> <p>Tablo B: r_id (int), r_obj (varchar)</p> <p>Tablo C

Tablo C'ye girmem gerekiyor, bu nedenle Tablo A'nın tam kopyası, yani obj_1 ve obj_2 adları yerine, başvuru numarasını kullanır. Bu nesne için (r_id) Tablo C'den (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)) 
Sen reference ve project birleştiren bir sorgu ile bir ekleme-select deyimi kullanabilirsiniz
+0

Sen açıklama ve örnek SQL gelen PK dayanarak bu 2 birleştirmek bir insert statament kullanılan eşleşmiyor Uygun tabloların yapılarını, bazı örnek verilerini ve bu verilerden elde etmek istediğiniz sonucu lütfen paylaşabilir misiniz? – Mureinik

+0

@Mureinik tamamlandı! Benim kötü .. – Nataly

+0

@Mureinik aşağıya bakın – Nataly

cevap

0

: Ben basamaklardır olarak 2 geçici görünümleri kullandı:

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

teşekkürler! Bu iyi ve tüm 3 sütunlara birden çok satır eklememi sağlıyor. Ancak, ON yan tümcesi yalnızca obj_1 için ayarlandığından, obj_1 & obj_2 tabağında birbirinin kopyalarıdır, ancak gerçekten, b.r_id için a.obj_2 için de doğru olması gerekir, bunu yapmanın bir yolu var mı? ? '(obj1, aksiyon, obj2) TableC INSERT INTO bir anlaşılacaktır @Nataly emin' – Nataly

+0

(b.r_id seçin a.rlt, a.obj1 = b.r_obj AÇIK TABLEB birleştirme tableA b.r_id) sen tam olarak, ama eğer yapsaydım, başka bir 'katılma 'ye ihtiyacın varmış gibi geliyor. Düzenlenmiş cevabımı görün. – Mureinik

+0

Ne yazık ki bu denemeye çalıştığım şey ama db2 buna izin vermiyor. – Nataly

0

Ben db2 belirli sınırlamaları beri geçici bir çözüm kullanmak zorunda kaldı Amacım.

Ben 2 ayrı gerekli olan birleştirmeler yapın:

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) 

sonra 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)