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