Найти предыдущие и следующие записи в алфавитном указателе для кандидата - PullRequest
2 голосов
/ 14 апреля 2011

В базе данных у меня есть строковое поле. Я хочу найти предыдущую и следующую строку в алфавитном порядке для строки кандидата, которой нет в базе данных. Одним из решений является временная вставка этого кандидата в базу данных и выполнение ORDER BY на поле, но это вызовет проблемы с производительностью (вставка перед каждым выбором). Вы знаете какой-нибудь другой способ сделать это?

Спасибо

1 Ответ

7 голосов
/ 14 апреля 2011

Следующее может дать вам несколько указателей для начала.

SELECT MAX(StringField)
FROM   YourTable
WHERE  StringField < Candidate
UNION ALL
SELECT MIN(StringField)
FROM   YourTable
WHERE  StringField > Candidate

Чтобы извлечь всю запись (и предполагая, что ваши StringFields уникальны), вы можете заключить это в подзапрос.

SELECT  *
FROM    YourTable yt
        INNER JOIN (
          SELECT StringField = MAX(StringField)
          FROM   YourTable
          WHERE  StringField < Candidate
          UNION ALL
          SELECT MIN(StringField)
          FROM   YourTable
          WHERE  StringField > Candidate
        ) yts ON yts.StringField = yt.StringField

Примечание. Одной из оптимизаций может быть сравнение всех прописных (или строчных) символов, чтобы Andy & ANDY имели одинаковый вес.

...