我需要返回所有文本结果(如果有的话),它们共享搜索字符串共有的最大长度左有界子字符串。
给定在包含的表列中搜索“StackOverflow”
"Stack",
"Sta",
"StackOv",
"StackOverthrow",
"StackOverSlow",
"StackFlow",
"Soverflow",
"StackOverCrow",
"StackOverSlow",
etc.
该查询将返回“StackOverthrow”,因为它包含最大数量的匹配字符,以及唯一结果集中的 StackOverSlow 和 StackOverCrow。目前我正在做一些低效的事情,即从 LIKE 搜索第一个字符开始,并继续重复和扩展搜索字符串,直到找不到任何内容,并保持最后一个好的结果。
IE
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:请注意,上面的示例有些简化。数据库中的绝大多数数据在 2 到 10 个字符之间,最常见的匹配长度约为 3 个字符。表中有超过 100K 条记录。
Edit2:抱歉,我需要澄清一下,可能有不止一个正确的结果,并且结果可能包含需要删除的重复项。目前,使用我低效的方法选择 distinct 很容易。