Оператор Oracle INSERT с выборками в разных таблицах
У меня две таблицы table1
а также table2
, Эти таблицы имеют уникальные name
а также id
колонны.
У меня также есть таблица отношений / соединения, table1_table2
который имеет прямые столбцы table1_id
а также table2_id
,
Что я хочу сделать, это вставить новое отношение в table1_table2
зная name
с элементов в table1
а также table2
Я хочу создать отношения для. Но мне нужно получить их 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
но я знаю только, что запись в table1
имеет name
bar
и запись в table2
имеет name
data
,
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
значения будут вставлены.