2017-03-29 59 views
0

我有兩個表table1table2。這些表格有獨特的nameid列。Oracle INSERT語句在不同表上選擇

我也有一個關係/連接表,table1_table2其中有直接向前的柱子table1_idtable2_id

我想要做的是在table1_table2中插入一個新的關係,知道table1table2中的元素的name s我想創建一個關係。但我需要將他們的id s插入table_table2

我要的是這樣的事情:

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

我也嘗試使用

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

也沒有工作。

我知道如果有必要,我可以首先提取id,但我寧願它在一個聲明中。

編輯:我也試着

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

分成table1_table2,但是我d o僅知道table1中的條目具有namebartable2中的條目具有namedata

+0

一些示例數據和更清晰的表結構視圖可能會有所幫助。你是否希望每個表中名稱匹配的ID - 對於所有名稱或特定名稱,因爲你已經顯示「name」爲固定的名稱?如果某個名字只出現在一個或另一個表中,該怎麼辦? –

+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') 
      ); 

不過,我把它寫成:

INSERT INTO table1_table2(table1_id,table2_id) SELECT t1.id,t2.id FROM表1 T1 JOIN table2 t2 ON t1.name ='some_name'AND t2.name ='another_name';

注意在這種情況下,如果兩個表中都沒有匹配,那麼根本沒有行被插入。使用VALUES,將插入一個NULL值。

+0

非常感謝,這工作:) –