2

データベースには、文字列フィールドがあります。データベースにない候補文字列の前と次の行をアルファベット順に検索したい。1 つの解決策は、一時的にこの候補をデータベースに挿入し、フィールドで ORDER BY を実行することですが、これによりパフォーマンスの問題が発生します (各選択の前に挿入を実行します)。これを実行する他の方法を知っていますか?

ありがとうございました

4

1 に答える 1

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

注: 最適化の 1 つは、すべての大文字 (または小文字) 文字を比較して、Andy と ANDY の重みが等しくなるようにすることです。

于 2011-04-14T18:48:22.910 に答える