Задача:
Выполнение нескольких запросов, содержащих результат выполнения другого запроса.
Реализация:
Для сохранения одиночного простого значения подходят локальные переменные.
- Явное объявление:
SET @type = "local"; SET @typesCount =5; SET @groupName = ( SELECT "terminator" );
- Объявление через запрос:
SELECT @queryVar:=10;
В случае необходимости сохранения нескольких значений, придется воспользоваться сохранением данных в временную таблицу, а дальше взятием их из нее. Время жизни временной таблицы ограничено выполняемым запросом.
- создание временной таблицы:
CREATE TEMPORARY TABLE groups( groupID INT(11) UNSIGNED, KEY `keyGroupID` (`groupID`) );
- вставка данных:
INSERT INTO groups( groupID ) SELECT ... FROM ... WHERE ...;
Применение
- улучшение читаемости и быстродействия запросов, обновляющих данные в миграциях
- Для исключения ошибки: #1093, возникающий при попутке изменения данных в таблице, полученных из той же таблице в подзапросе:
UPDATE table ... WHERE data = (SELECT ... FROM table ...)