Вы можете перечислить слова с помощью row_number()
в общем табличном выражении (если ваша база данных поддерживает эти функции), а затем выполнить фильтрацию во внешнем запросе:
with cte as (
select word, row_number() over(order by word) rn
from mytable
)
select c.word
from cte c
where c.rn = (
select c1.rn from cte c1 where c1.word = 'database'
) + 1
Это дает вам слово, которое следует сразу за "база данных". Вы можете изменить окончательный + 1
, чтобы получить другие результаты (например, чтобы получить слово на две позиции раньше, вы должны использовать - 2
).
Другой вариант использует запрос с ограничением строк.
Чтобы получить следующее слово:
select word
from mytable
where word > 'database'
order by word
limit 1
Слово на две позиции после:
select word
from mytable
where word > 'database'
order by word
limit 1, 1
Предыдущее слово:
select word
from mytable
where word < 'database'
order by word desc
limit 1
Слово на две позиции before:
select word
from mytable
where word < 'database'
order by word desc
limit 1, 1
Примечание: синтаксис предложения, ограничивающего количество строк, зависит от базы данных.