Обращение к временной таблице более одного раза в одном и том же запросе в MySQL
В MySQL вы не можете ссылаться на временную таблицу более одного раза в одном и том же запросе, поэтому это требует значительных изменений в коде.
Рассмотрим следующий фрагмент кода:
create procedure self_join_proc
as
begin
create table #temp_t1(a int, b int)
insert into #temp_t1 values(0,0);
insert into #temp_t1 values(0,1);
insert into #temp_t1 values(1,1);
insert into #temp_t1 values(1,2);
select t1.a, t1.b, t2.a, t2.b from #temp_t1 t1, #temp_t1 t2 where t1.a=t2.b;
end;
Для этого случая есть следующее решение — создание аналогичной временной таблицы.
Сначала нужно проверить, существует ли временная таблица с именем tt_temp_t12, и если она уже существует, удалить ее. Затем создаем временную таблицу tt_temp_t12 и заполняем ее данными из таблицы tt_temp_t1. В операторе select вместо повторного использования таблицы tt_temp_t1 мы будем использовать только что созданную таблицу tt_temp_t12.
Если временная таблица используется три раза в одном запросе, то будет создано две дополнительные временные таблицы, если четыре раза — три дополнительные временные таблицы и так далее. Таким образом, мы избежим неоднократного обращения к временной таблице в одном и том же запросе.
Вы получите следующий результат:
create PROCEDURE self_join_proc()
begin
DROP TEMPORARY TABLE IF EXISTS tt_temp_t1;
create TEMPORARY table tt_temp_t1
(
a INT,
b INT
);
insert into tt_temp_t1 values(0,0);
insert into tt_temp_t1 values(0,1);
insert into tt_temp_t1 values(1,1);
insert into tt_temp_t1 values(1,2);
DROP TEMPORARY TABLE IF EXISTS tt_temp_t12;
CREATE TEMPORARY TABLE tt_temp_t12 select * from tt_temp_t1;
select t1.a, t1.b, t2.a, t2.b from tt_temp_t1 t1, tt_temp_t12 t2 where t1.a = t2.b;
end;
Как видите, процедуры возвращают один и тот же набор результатов.
Если у вас есть другие вопросы, пожалуйста, свяжитесь с нами: support@convertum.ru
