Oracle INSERT语句,在不同的表上选择

时间:2017-03-29 14:55:16

标签: sql oracle plsql relational-database oracle-xe

我有两张表table1table2。这些表格具有唯一的nameid列。

我还有一个关系/联接表,table1_table2,其中包含直接的列table1_idtable2_id

我想要做的是在table1_table2name知道table1中元素的table2id我希望创建一个关系。但我需要让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

进入table1,但我只知道name中的条目包含bar table2,而name中的条目具有data }} write.csv(df, "mydf.csv", row.names=FALSE, na="")

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

但是,我会把它写成:

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

请注意,在这种情况下,如果两个表中都没有匹配项,则根本不会插入任何行。使用VALUES,将插入NULL值。