2013-09-29 3 views
0

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

INSERT INTO takes (stu_id, "CS-001", 1, "Autumn", 2009, null) 
VALUES (SELECT id AS stu_id 
FROM student 
WHERE dept_name = "Comp. Sci.") 

Таким образом, я знаю, что все другие входные данные, кроме идентификатора студента, однако MySQL просто дает мне ошибку синтаксиса.

ответ

1
INSERT INTO takes (stu_id, col2, col3, col4, col5, col6) 
SELECT id, 'CS-001', 1, 'Autumn', 2009, null 
FROM student 
WHERE dept_name = 'Comp. Sci.' 

Я не знаю ваших имен столбцов назначения - вы должны заменить их на настоящие в запросе выше.

+0

Это была моя первая попытка, и она вообще не работает (даже если это id вместо stu_id). Это массивная синтаксическая ошибка с кодом ошибки 1064 – user2171584

+0

@ user2171584: Это будет работать с правильными именами столбцов таблицы назначения. –

+0

@ user2171584: [Пример SQLFiddle] (http://sqlfiddle.com/#!2/aafde6/1) –

0

Вставка запросы могут быть структурированы следующим образом:

insert into table 
(field1, field2, etc) 
(value1, value2 etc) 

или как это:

insert into table 
(field1, field2, etc) 
select this, that, etc 
from etc 

Вы попытались объединить два. Это одна из причин, по которой вы получили ошибку.

Ответ juergen является примером второй конструкции. Его это и есть комбинация полей и постоянных значений. Это нормально. Если вы получаете синтаксические ошибки, это в ваших деталях. Его ответ показывает правильную общую идею.

Часто стоит строить свой запрос шаг за шагом. Начните с этого:

insert into takes 
(stu_id) 
select id 
from student 
where dept_name = 'Comp. Sci' 

Если это работает, добавьте одно поле внутри скобок и то, что уместно для выбора пункта вашего запроса. Продолжайте идти с этими малышами до тех пор, пока вы не поймете это правильно. Это подход, который я часто принимаю.