Замороченный запрос типа INSERT из других таблиц - MySQL
Формулировка задачи:
доброго времени суток!
с наступившим Вас Новым годом!
есть некая абстрактная таблица results типа
запрос типа SELECT a.a_id, b.b_id, c.c_id, d.d_id FROM aaa a LEFT JOIN *собрать_остальные_таблицы* выдает нужные 4 айдишника.
а теперь вопрос: как одним запросом сунуть всю эту дребедень + некое своё абстрактное значение 897 в первую таблицу?
логика вроде бы простая, в 5 полей засовываем 4 значения из других(-ой) таблиц(-ы), а пятое - свое. но что-то не хочет система меня понимать. быть может так просто не получится?
ошибку выдает #1241 - Operand should contain 1 column(s). ну понятно что дескать СЕЛЕКТ должен выдать 1 колонку, а я хочу 4 получить, добавить свою пятую и засунуть((
а вот запрос, подсмотренный в интернете логичен и работает
p.s. вот размусолил, раза в 2 можно было короче проблему объяснить...
| a_id | b_id | c_id | d_id | result |
INSERT INTO values (a_id, b_id, c_id, d_id, result) VALUES ( (SELECT a.a_id, b.b_id, c.c_id, d.d_id FROM aaa a LEFT JOIN bbb b ON b.b_id=a.b_id LEFT JOIN ccc c ON c.c_id=b.c_id LEFT JOIN ddd d ON d.d_id=c.d_id WHERE d.d_id=123) , 897)
insert into table2 (Name, Subject, student_id, result) select Name, Subject, student_id, result from table1;
Решение задачи: «Замороченный запрос типа INSERT из других таблиц»
textual
Листинг программы
INSERT INTO values (a_id, b_id, c_id, d_id, result) SELECT a.a_id, b.b_id, c.c_id, d.d_id,"897" FROM aaa AS a LEFT JOIN bbb AS b ON b.b_id=a.b_id LEFT JOIN ccc AS c ON c.c_id=b.c_id LEFT JOIN ddd AS d ON d.d_id=c.d_id WHERE d.d_id=123
Объяснение кода листинга программы
В представленном коде выполняется сложный запрос типа INSERT из других таблиц. Пояснение к коду:
INSERT INTO values (a_id, b_id, c_id, d_id, result)- здесь указывается, что мы хотим вставить данные в таблицуvaluesи указываем столбцы, в которые мы хотим вставить данные.SELECT a.a_id, b.b_id, c.c_id, d.d_id,897FROM aaa AS a- здесь мы указываем, откуда мы хотим взять данные для вставки. Мы выбираем данные из таблицыaaaи присоединяем её к другим таблицам (bbb, ccc, ddd) по соответствующим столбцам.LEFT JOIN bbb AS b ON b.b_id=a.b_id- здесь мы присоединяем таблицуbbbк таблицеaaaпо столбцуb_id.LEFT JOIN ccc AS c ON c.c_id=b.c_id- здесь мы присоединяем таблицуcccк таблицеbbbпо столбцуc_id.LEFT JOIN ddd AS d ON d.d_id=c.d_id- здесь мы присоединяем таблицуdddк таблицеcccпо столбцуd_id.WHERE d.d_id=123- здесь мы добавляем условие, что мы хотим получить данные только из строки, гдеd_idравно 123.'897'- здесь мы указываем значение, которое мы хотим вставить в столбецresult. Таким образом, данный код выполняет сложный запрос типа INSERT из других таблиц, где мы выбираем данные из таблицыaaaи присоединяем их к другим таблицам (bbb, ccc, ddd) по соответствующим столбцам, а затем вставляем полученные данные в таблицуvalues.