Оператор Oracle INSERT с выборками в разных таблицах

У меня две таблицы table1 а также table2, Эти таблицы имеют уникальные name а также id колонны.

У меня также есть таблица отношений / соединения, table1_table2 который имеет прямые столбцы table1_id а также table2_id,

Что я хочу сделать, это вставить новое отношение в table1_table2 зная nameс элементов в table1 а также table2 Я хочу создать отношения для. Но мне нужно получить их 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 имеет namebar и запись в table2 имеет namedata,

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 ПРИСОЕДИНЯЙТЕСЬ table2 t2 ON t1.name = 'some_name' И t2.name = 'another_name';

Обратите внимание, что в этом случае, если нет совпадений ни в одной из таблиц, строка не вставляется вообще. С помощью VALUES, NULL значения будут вставлены.

Другие вопросы по тегам