我需要返回共享搜索字符串共有的最大长度左界子字符串的所有文本结果(如果有)。
假设在包含以下内容的表列中搜索“StackOverflow”
"Stack",
"Sta",
"StackOv",
"StackOverthrow",
"StackOverSlow",
"StackFlow",
"Soverflow",
"StackOverCrow",
"StackOverSlow",
etc.
该查询将返回“StackOverthrow”,因为它包含最大数量的匹配字符,以及唯一结果集中的 StackOverSlow 和 StackOverCrow。
目前我正在做一些效率低下的事情,即从对第一个字符的 LIKE 搜索开始,然后继续重复和扩展搜索字符串,直到找不到任何内容,并保留最后一个好的结果。
i.e.
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)
我知道这种方法效率极低,任何人都可以提供单个查询来实现此结果吗?我知道我可以一次搜索所有组合并过滤代码中最长的结果,但是,我认为数据库应该在这方面做得更好。
Edit1:请注意,上面的示例有些简化。 DB 中的绝大多数数据都在 2 到 10 个字符之间,最常见的匹配长度约为 3 个字符。表中有超过 100K 条记录。
Edit2:抱歉,我需要澄清可能有多个正确结果,并且结果可能包含需要删除的重复项。目前,使用我的低效方法选择不同的方法很容易。