検索文字列に共通の最大長の左境界部分文字列を共有するすべてのテキスト結果を返す必要があります。
次を含むテーブル列で「StackOverflow」を検索すると、
"Stack",
"Sta",
"StackOv",
"StackOverthrow",
"StackOverSlow",
"StackFlow",
"Soverflow",
"StackOverCrow",
"StackOverSlow",
etc.
一致する文字が最大数含まれているため、クエリは「StackOverthrow」を返し、一意の結果セットに StackOverSlow と StackOverCrow を返します。現在、最初の文字の LIKE 検索から開始し、何も見つからなくなるまで検索文字列を繰り返して拡張し、最後の良い結果を維持するという非効率的なことを行っています。
すなわち
select names from table where name like 'XX%';
"S" ->Results
"St"->Results
. .
"StackOver"->Results
"StackOverf"-> No results (Last result returning items beginning with StackOver etc as being the correct answer)
このアプローチが非常に非効率的であることはわかっていますが、この結果を達成するために単一のクエリを提供できる人はいますか? すべての組み合わせを一度に検索して、コード内の最長の結果をフィルタリングできることはわかっていますが、DB の方が優れていると思います。
Edit1: 上記の例はやや単純化されていることに注意してください。DB 内のデータの大部分は 2 ~ 10 文字で、最も一般的な一致の長さは約 3 文字です。テーブルには 100K を超えるレコードがあります。
Edit2: 申し訳ありませんが、複数の正しい結果が存在する可能性があり、結果には削除が必要な重複が含まれている可能性があることを明確にする必要がありました。現在、私の非効率的な方法では、個別の選択は簡単です。