2016-06-17 5 views
3

Я пытаюсь вставить два значения из двух отдельных утверждений, что-то вроде:INSERT INTO двойной выбор - как?

INSERT INTO manytomany_relation_a_and_b_tables (a_id, b_id) VALUES 
(SELECT id FROM a_table WHERE someColumnFromA="SOMETHING"), 
(SELECT id FROM b_table WHERE someColumnFromB="SOMETHING"); 

Очевидно, что не работает, но как я могу добиться эффекта, который я хочу?

ответ

3

Если каждый из SELECT подзапросов возвращает ровно один значение, вы можете использовать INSERT INTO ... SELECT синтаксис:

INSERT INTO manytomany_relation_a_and_b_tables (a_id, b_id) 
SELECT (SELECT id FROM a_table WHERE someColumnFromA="SOMETHING"), 
     (SELECT id FROM b_table WHERE someColumnFromB="SOMETHING") 

В противном случае вам нужно указать условие, на котором две таблицы соединяются вместе и выполнять JOIN в SELECT запрос оператора INSERT.

2

Вы можете также использовать соединение, если эти две таблицы имеют любую вещь в общем ..

INSERT INTO manytomany_relation_a_and_b_tables (a_id, b_id) 
VALUES 
select t1.id,t2.id 
from a_table t1 
join 
b_table t2 
on t1.something=t2.something 
and t1.somecolumna='something' and t2.somecolumna='something'