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

Oracle INSERT statement with selects on different tables

我有两个 tables table1table2。这些 table 具有独特的 nameid 列。

我还有一个关系/连接 table, table1_table2 有直截了当的列 table1_idtable2_id.

我想做的是在 table1_table2 中插入一个新关系,知道 table1table2 中元素的 name 我想创建一个的关系。但我需要让他们的 ids 将它们插入 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 bartable2 中的条目有 name data.

这应该有效:

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(table1_id、table2_id) SELECT t1.id, t2.id 从 table1 t1 加入 table2 t2 在 t1.name = 'some_name' 和 t2.name = 'another_name';

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