2017-03-29 11 views
0

私は2つのテーブルtable1table2を持っています。これらの表には、一意のnameidの列があります。Oracle INSERTステートメントと異なるテーブルでの選択

また、関係/結合テーブルtable1_table2は、ストレートフォワード列table1_idtable2_idを持っています。私が何をしたいか

は私がのために関係を作成したいtable1table2の要素のnameのを知っtable1_table2に新しい関係を挿入することです。しかし、idtable_table2に挿入する必要があります。私もまた、うまくいきませんでした

insert into table1_table2 values ((select id from (select id from table1 where name = 'some_name') where rownum=1), (select id from (select id from table2 where name = 'another_name') where rownum=1)) 

を使用してみました

insert into table1_table2 values ((select id from table1 where name = 'some_name'), (select id from table2 where name = 'another_name')) 

:私が欲しいもの

はそのようなものです。

私は最初にidを抽出することができますが、必要に応じて1つのステートメントに含めることをお勧めします。

編集:

table1 
id name 
1 foo 
2 bar 

table2 
id name 
1 some 
2 data 

table1_table2 
table1.id table2.id 
1   1 

、今私は

table1.id table2.id 
2   2 
を挿入したい:私もまた

例のデータを動作しませんでした

insert into table1_table2 values (select t1.id, t2.id from table1 t1, table2 t2 where t1.name = 'some_name' and t2.name = 'another_name') 

を試してみました

table1_table2に変換するが、I d table1のエントリがnamebarであり、table2のエントリがnamedataであることがわかっているだけです。

+0

いくつかのサンプルデータと、テーブル構造のより明確な見方が役立ちます。名前が一致する各テーブルのIDを指定しますか?名前が固定されているので、すべての名前または特定の名前のIDが必要ですか?名前が1つのテーブルにのみ表示される場合はどうなりますか? –

+0

「うまくいかない」とは何かを説明してください。 –

答えて

1

これは動作するはずです:

INSERT INTO table1_table2 (table1_id, table2_id) 
    VALUES ((SELECT id FROM table1 WHERE name = 'some_name'), 
      (SELECT id FROM table2 WHERE name = 'another_name') 
      ); 

をしかし、私のようにそれを記述します。table1_table2 INTO

INSERT(table1_id、table2_id) SELECTのt1.idは、TABLE1 T1から をt2.id を登録しようテーブル2 t2 ON t1.name = 'some_name' AND t2.name = 'another_name';

この場合、両方のテーブルに一致するものがない場合は、まったく行が挿入されません。 VALUESを使用すると、値NULLが挿入されます。

+0

ありがとう、これは働いた:) –

関連する問題