Временная таблица и ее апдейт - MySQL

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

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

Здравствуйте! Есть таблица параметров main_table, которая формируется процедурой test. Внутри процедуры мы создаем временную таблицу tab_main_tmp, заполняем ее данными из других таблиц базы данных. К примеру мы берем данные из 3х таблиц. Кусок кода процедуры test:
-- создаем временную таблицу
create temporary table if not exists tab_main_tmp 
(
North1_T_pod1 DECIMAL(18,2) NULL,
North1_T_obr1 DECIMAL(18,2) NULL,
North1_T_pod2 DECIMAL(18,2) NULL,
North1_T_obr2 DECIMAL(18,2) NULL,
North1_T_pod3 DECIMAL(18,2) NULL,
North1_T_obr3 DECIMAL(18,2) NULL
)
 
-- Добавляем записи во временную таблицу
insert into tab_main_tmp 
(
North1_T_pod1,  
North1_T_obr1  
)
 
SELECT 
T_pod, T_obr
from db.sever1 order by RowID desc limit 1;
А как поступить с добавлением записей из других таблиц? Я понимаю, что там уже будет не insert, а update. Insert добавит новую строку и потеряет данные предыдущей таблицы. А мы все данные из трех таблиц формируем в одной строке. был вариант использовать такой запрос:
update tab_main_tmp 
set North1_T_pod2 = (select T_pod from sever11 order by RowID desc limit 1),  
North1_T_obr2 = (select T_obr from sever11 order by RowID desc limit 1)
Хотелось бы упростить такой запрос, потому что при увеличении числа полей таблицы надо ручками все это делать... А лень - мать прогресса В MS SQL возможно организовать запрос такой (в том смысле что взять запрос за основу, но с учетом синтаксиса MySQL):
UPDATE #tab_main_tmp
SET M1 = a.M1, M2 = a.M2, WTV = a.WTV
FROM(SELECT top 1 M1, M2, WTV FROM [20_1_1_1] ORDER BY RowID DESC) AS a WHERE #tab_main_tmp.ID = 1
Но в MySQL он не прокатывает.

Решение задачи: «Временная таблица и ее апдейт»

textual
Листинг программы
UPDATE tab_main_tmp t , (SELECT * FROM sever11 s ORDER BY RowID DESC LIMIT 1) s
SET  t.North1_T_pod2 = s.T_pod, t.North1_T_obr2  = s.T_obr

Объяснение кода листинга программы

В данном коде происходит обновление данных в таблице tab_main_tmp с использованием временной таблицы sver11.

  1. Создается временная таблица sver11 с помощью подзапроса SELECT * FROM sever11 s ORDER BY RowID DESC LIMIT 1.
  2. Результаты запроса присваиваются переменным T_pod и T_obr.
  3. Выполняется операция обновления данных в таблице tab_main_tmp с использованием переменных T_pod и T_obr.
  4. Обновленные данные сохраняются в таблице tab_main_tmp с использованием переменных North1_T_pod2 и North1_T_obr2.

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


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

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

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