Задача не практическая. Хочется оценить, какими подходами ее можно решить на SQL'ях разных диалектов (PostgreSQL, SQLite3, MySQL). И как сложно это решаемо.
Задача
Есть таблица с положительными числами [0..N]. Нужно вывести в порядке возрастания все числа из указанной таблицы, которые входят в последовательность Фибоначчи
Ответ
Генератор без использования таблиц для SQLite, postgresql:
WITH Recursive Q(Num,Prev) as(
select 1,1
union all
select Q.Num+Q.Prev,Q.Num
from Q
where Q.Num<10000
)
select Num from Q
Если надо выбрать из них только те числа, что есть в некой таблице - то в итоговый select добавить join с этой таблицей для проверки наличия числа в ней.
Для MS SQL и Oracle - убрать из запроса выше фразу Recursive. Для Oracle дополнительно добавить from DUAL после select 1,1
Для MySQL требуется опорная таблица с нужным количеством записей, содержимое этих записей значения не имеет:
select @tmp:=@Prev+@Num as Num, @Prev:=@Num, @Num:=@tmp
from seqnum, (select @Prev:=1, @Num:=1) A
order by Num
Это опять же генератор. Для проверки наличия в некой таблице - заключить в подзапрос и сделать join.
Комментариев нет:
Отправить комментарий