Страницы

Поиск по вопросам

среда, 24 октября 2018 г.

Как вывести несколько чисел используя только sql-запрос?

Нужно написать sql-запрос, который бы возвращал точно такой вывод:
id| --- 1 | 2 | 3 | 5 |
Представьте, что в базе данных нет ни одной таблицы, и создавать их нельзя.
mysql> SELECT 1 id UNION SELECT 2 id UNION SELECT 3 id UNION SELECT 5 id; +----+ | id | +----+ | 1 | | 2 | | 3 | | 5 | +----+ 4 rows in set (0,00 sec)
Существует ли более элегантное решение?


Ответ

В MySQL единственный вариант (Алиас нужен только у первого числа):
select 1 ID union select 2 union select 3 union select 5
Самый красивый (для малого количества чисел) вариант можно написать в MS-SQL и Postrgess
select * from (values (1),(2),(3),(5)) as t(id)
Oracle (С использованием системного типа в качестве коллекции):
select column_value ID from table(sys.odcinumberlist(1,2,3,5))
Если чисел значительно больше и они идут просто подряд, то почти универсальный (Из широко распространенных СУБД НЕ работает только в MySQL):
with Q as ( select 1 ID union all select ID+1 from Q where ID<5 ) select * from Q
Самый лаконичный (IMHO) вариант для большого количества чисел подряд в Oracle
select rownum id from DUAL connect by rownum<6

Комментариев нет:

Отправить комментарий