SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.06.2022 22:31:30

OlegR
Участник
Зарегистрирован: 14.06.2022
Сообщений: 21

Замена временной таблицы?

Есть список номеров в виде строки "10,2,1,45,5". Формируется по ходу вычислений и может содержать максимум до 30 элементов.
Делаю выборку:

SELECT `id`, `date` FROM `orders` WHERE `type` = 1

Нужно эту выборку модифицировать таким образом, что бы получить "декартово произведение" выбранных заказов и номеров из вышеприведенного списка.

Типа:
строка "10,5"
выборка
1,2022-06-10
5,2022-06-11

Результат:
10,1,2022-06-10
10,5,2022-06-11
5,1,2022-06-10
5,5,2022-06-11

Пока есть мысль создавать из этой строки временную таблицу в памяти и использовать ее в основном запросе через CROSS JOIN.

Можно ли обойтись без временной таблицы и каким либо образом делать выборку элементов из строки прямо в основном запросе?

Неактивен

 

#2 16.06.2022 14:42:12

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Замена временной таблицы?

Можно формировать временную таблицу сразу в запросе:

SELECT `id`, `date` FROM `orders`,
(select 10 union all select 5) as t
 WHERE `type` = 1
 

Неактивен

 

#3 16.06.2022 17:18:31

OlegR
Участник
Зарегистрирован: 14.06.2022
Сообщений: 21

Re: Замена временной таблицы?

Пока реализовал так:

select n.num, o.id, o.date from orders as o
cross join (select ELT(@n:=@n+1, '10', '5', '15') as num from orders, select(@n:=0) as c where @n < 3) as n
where o.type = 1

Ваше решение, имхо, более понятное - спасибо!
Правда, в такой реализации номера (10 и 5) не выводятся - нужно изменить так:
SELECT t.`num`,o.`id`, o.`date` FROM `orders` as o,
(select 10 as num union all select 5 as num) as t
 WHERE o.`type` = 1

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson