У меня есть таблица, которая имеет 3 столбца, представляющие остановки в маршруте шины.
ID
stop_name
stop_order
Я желаю возвратить список остановок, запускающихся с текущей остановки (который я знаю). Таким образом, если текущая остановка будет остановкой номер 5 затем, что возвращается, то будет следующие:
stop_order
5
6
7
8
1
2
3
4
Я попробовал:
Select * from routes where stop_order >= 3 and route = 'Red'
Union
Select * from routes where stop_order < 3 and route = 'Red
и это работает, если данные вводились в таблицу в порядке остановок. Если это не было затем, это возвращает данные в порядке, это вводилось.
Вы можете сделать это в одном запросе, чтобы сэкономить на доступе к таблице, используя операторы case.
select * from routes
where route = 'Red'
order by case when stop_order >= 3 then 0 else 1 end, stop_order
;
Исправлено!
Попробуйте упорядочить по stop_order для обоих операторов sql. По умолчанию результаты будут отсортированы по возрастанию
Думаю, Патрику это почти удалось:
(SELECT * FROM routes WHERE stop_order >= 5 ORDER BY stop_order)
UNION ALL
(SELECT * FROM routes WHERE stop_order < 5 ORDER BY stop_order)
Использование этого будет работать:
(Select * from routes where stop_order >= 3 and route = 'Red' Order By ID)
Union
(Select * from routes where stop_order < 3 and route = 'Red' Order By ID)
Изменить : добавлены забытые круглые скобки.