データベースには、文字列フィールドがあります。データベースにない候補文字列の前と次の行をアルファベット順に検索したい。1 つの解決策は、一時的にこの候補をデータベースに挿入し、フィールドで ORDER BY を実行することですが、これによりパフォーマンスの問題が発生します (各選択の前に挿入を実行します)。これを実行する他の方法を知っていますか?
ありがとうございました
データベースには、文字列フィールドがあります。データベースにない候補文字列の前と次の行をアルファベット順に検索したい。1 つの解決策は、一時的にこの候補をデータベースに挿入し、フィールドで ORDER BY を実行することですが、これによりパフォーマンスの問題が発生します (各選択の前に挿入を実行します)。これを実行する他の方法を知っていますか?
ありがとうございました
以下は、最初にいくつかの指針を与えるかもしれません。
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 の重みが等しくなるようにすることです。