2011-04-14 2 views
2

데이터베이스에서 문자열 필드가 있습니다. 이전 & 다음 행을 데이터베이스에없는 후보 문자열에 대한 알파벳 순서로 찾으려고합니다. 한 가지 해결책은 임시로이 후보를 데이터베이스에 삽입하고 필드에서 ORDER BY를 수행하는 것이지만, 성능 문제 (각 선택 전에 삽입을 수행)가 생성됩니다. 이것을 수행하는 다른 방법을 알고 있습니까?후보자 알파벳순 색인에서 이전 및 다음 항목 찾기

고맙습니다.

답변

7

다음은 몇 가지 지침을 제공합니다.

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 

참고 : 하나의 최적화는 앤디 & 앤디가 동일한 비중을 가지고 있으므로 모두 대문자 (또는 소문자) 문자에 비교 될 수 있습니다.

관련 문제