Временная таблица и ее апдейт - MySQL
Формулировка задачи:
Здравствуйте!
Есть таблица параметров main_table, которая формируется процедурой test. Внутри процедуры мы создаем временную таблицу tab_main_tmp, заполняем ее данными из других таблиц базы данных. К примеру мы берем данные из 3х таблиц.
Кусок кода процедуры test:
А как поступить с добавлением записей из других таблиц? Я понимаю, что там уже будет не insert, а update. Insert добавит новую строку и потеряет данные предыдущей таблицы. А мы все данные из трех таблиц формируем в одной строке.
был вариант использовать такой запрос:
Хотелось бы упростить такой запрос, потому что при увеличении числа полей таблицы надо ручками все это делать... А лень - мать прогресса
В MS SQL возможно организовать запрос такой (в том смысле что взять запрос за основу, но с учетом синтаксиса MySQL):
Но в MySQL он не прокатывает.
-- создаем временную таблицу 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;
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)
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
Решение задачи: «Временная таблица и ее апдейт»
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
.
- Создается временная таблица
sver11
с помощью подзапросаSELECT * FROM sever11 s ORDER BY RowID DESC LIMIT 1
. - Результаты запроса присваиваются переменным
T_pod
иT_obr
. - Выполняется операция обновления данных в таблице
tab_main_tmp
с использованием переменныхT_pod
иT_obr
. - Обновленные данные сохраняются в таблице
tab_main_tmp
с использованием переменныхNorth1_T_pod2
иNorth1_T_obr2
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д