Нужно написать 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
Комментариев нет:
Отправить комментарий