Страницы

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

суббота, 14 декабря 2019 г.

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

#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)


Существует ли более элегантное решение?
    


Ответы

Ответ 1



В 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

Ответ 2



Есть такой вариант, используя T-SQL. Физически таблица не создается, так что условие выполнено) Плюс это решение намного более гибкое, если вдруг кто-то решит изменить задачу. declare @t1 as table(ID int) declare @i int=0 while (@i<5) begin set @i+=1 if (@i<>4) insert into @t1 values(@i) end select * from @t1

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

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