Замороченный запрос типа INSERT из других таблиц - MySQL

Узнай цену своей работы

Формулировка задачи:

доброго времени суток! с наступившим Вас Новым годом! есть некая абстрактная таблица results типа
a_id b_id c_id d_id result
запрос типа SELECT a.a_id, b.b_id, c.c_id, d.d_id FROM aaa a LEFT JOIN *собрать_остальные_таблицы* выдает нужные 4 айдишника. а теперь вопрос: как одним запросом сунуть всю эту дребедень + некое своё абстрактное значение 897 в первую таблицу?
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)
логика вроде бы простая, в 5 полей засовываем 4 значения из других(-ой) таблиц(-ы), а пятое - свое. но что-то не хочет система меня понимать. быть может так просто не получится? ошибку выдает #1241 - Operand should contain 1 column(s). ну понятно что дескать СЕЛЕКТ должен выдать 1 колонку, а я хочу 4 получить, добавить свою пятую и засунуть(( а вот запрос, подсмотренный в интернете
insert into table2 (Name, Subject, student_id, result)
select Name, Subject, student_id, result
from table1;
логичен и работает p.s. вот размусолил, раза в 2 можно было короче проблему объяснить...

Решение задачи: «Замороченный запрос типа 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 из других таблиц. Пояснение к коду:

  1. INSERT INTO values (a_id, b_id, c_id, d_id, result) - здесь указывается, что мы хотим вставить данные в таблицу values и указываем столбцы, в которые мы хотим вставить данные.
  2. SELECT a.a_id, b.b_id, c.c_id, d.d_id,897FROM aaa AS a - здесь мы указываем, откуда мы хотим взять данные для вставки. Мы выбираем данные из таблицы aaa и присоединяем её к другим таблицам (bbb, ccc, ddd) по соответствующим столбцам.
  3. LEFT JOIN bbb AS b ON b.b_id=a.b_id - здесь мы присоединяем таблицу bbb к таблице aaa по столбцу b_id.
  4. LEFT JOIN ccc AS c ON c.c_id=b.c_id - здесь мы присоединяем таблицу ccc к таблице bbb по столбцу c_id.
  5. LEFT JOIN ddd AS d ON d.d_id=c.d_id - здесь мы присоединяем таблицу ddd к таблице ccc по столбцу d_id.
  6. WHERE d.d_id=123 - здесь мы добавляем условие, что мы хотим получить данные только из строки, где d_id равно 123.
  7. '897' - здесь мы указываем значение, которое мы хотим вставить в столбец result. Таким образом, данный код выполняет сложный запрос типа INSERT из других таблиц, где мы выбираем данные из таблицы aaa и присоединяем их к другим таблицам (bbb, ccc, ddd) по соответствующим столбцам, а затем вставляем полученные данные в таблицу values.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.5 из 5
Похожие ответы