2015-08-11 2 views
0

У меня есть таблица X, в которой я хочу вставить строку. Эта таблица содержит ссылку на внешний ключ из другой таблицы Y. Теперь я хотел бы использовать этот идентификатор из таблицы Y должны быть вставлена ​​в таблице X при вставке новой записи в таблице X.SQL-вставка путем выбора из другой таблицы

INSERT into X (col1, col2, col3, foreignKey) 
(
    'col1 value', 
    'col2 value', 
    'col3 value', 
    select id from Y y where y.id = '2' 
); 

Это терпит неудачу по той очевидной причине, что sql не очень хорошо сформирован. Как обойти это?

ответ

3

Зависит от того, что вы хотите сделать:

INSERT into X (col1, col2, col3, foreignKey) 
select 
    'col1 value', 
    'col2 value', 
    'col3 value', 
    id from Y y where y.id = '2'; 

вставит такое же количество строк, как y where y.id = '2' возвращается.

Или:

INSERT into X (col1, col2, col3, foreignKey) 
(
    'col1 value', 
    'col2 value', 
    'col3 value', 
    (select id from Y y where y.id = '2') 
); 

Работает только если (select id from Y y where y.id = '2') возвращает 1 строку (или 0 строк.) Всегда будет вставить 1 строку, даже если у пусто!

2

Правильный синтаксис для этого заключается в следующем:

Insert Into X (Col1, Col2, Col3, ForeignKey) 
Select 'col1 value', 
     'col2 value', 
     'col3 value', 
     id 
From Y y 
Where y.Id = '2' 
Смежные вопросы