gpt4 book ai didi

MySQL选择匹配字符串的最大长度

转载 作者:行者123 更新时间:2023-11-29 02:01:38 24 4
gpt4 key购买 nike

我需要返回所有文本结果(如果有的话),它们共享搜索字符串共有的最大长度左边界子字符串。

在包含

的表列中搜索“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)

我知道这种方法效率极低,任何人都可以提供一个查询来实现这个结果吗?我知道我可以一次搜索所有组合并过滤代码中最长的结果,但是,我认为数据库在这方面应该做得更好。

Edit1:请注意,上面的示例在某种程度上是一种简化。数据库中的绝大多数数据在 2 到 10 个字符之间,最常见的匹配长度约为 3 个字符。表中有超过 100K 条记录。

Edit2:抱歉,我需要澄清可能有不止一个正确的结果,并且结果可能包含需要删除的重复项。目前使用我低效的方法选择 distinct 很容易。

最佳答案

有了 name 上的索引,下面的代码应该非常高效:

SELECT DISTINCT name
FROM myTable
WHERE name LIKE CASE
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'S%') THEN '%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'St%') THEN 'S%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'Sta%') THEN 'St%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'Stac%') THEN 'Sta%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'Stack%') THEN 'Stac%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackO%') THEN 'Stack%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOv%') THEN 'StackO%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOve%') THEN 'StackOv%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOver%') THEN 'StackOve%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOverf%') THEN 'StackOver%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOverfl%') THEN 'StackOverf%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOverflo%') THEN 'StackOverfl%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOverflow%') THEN 'StackOverflo%'
ELSE 'StackOverflow%'
END

查看 sqlfiddle .

关于MySQL选择匹配字符串的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13687168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com