查找最长匹配前缀

Gre*_*ant 4 sql-server-2000

我有两个表:

资料来源:

(SName)  (SId)
Apple1   100
Apple2   200
Banks    300
BanksB   400
Bankerly 500
Run Code Online (Sandbox Code Playgroud)

前缀:

(PName) (PId)
App     1
Bank    2
Banker  3
Run Code Online (Sandbox Code Playgroud)

我的目标:找到与每个来源匹配的最长前缀。结果如下所示:

(SName)  (SId) (PName) (PId)
Apple1   100   App     1
Apple2   200   App     1
Banks    300   Bank    2
BanksB   400   Bank    2
Bankerly 500   Banker  3
Run Code Online (Sandbox Code Playgroud)

限制条件:我使用的是 SQL Server 2000 并且无法升级。我知道如何使用分析函数解决这个问题,但据我所知,它们在 SQL Server 2000 中不可用。

Mar*_*ith 5

一种方式(SQL小提琴

SELECT SName,
       SId,
       LEFT(SName, MAX(LEN(PName)))                                          AS PName,
       CAST(SUBSTRING(MAX(STR(LEN(PName), 10) + LTRIM(PId)), 11, 10) AS INT) AS PId
FROM   Sources S
       JOIN Prefixes P
         ON S.SName LIKE P.PName + '%'
GROUP  BY SId,
          SName 
ORDER BY SId   
Run Code Online (Sandbox Code Playgroud)

我假设所有前缀都不允许包含%会扰乱LIKE搜索的字符。

它使用该方法的一个变型中列出5这篇文章TOP N每组查询在捆扎PId用沿MAX(length)。一旦MAX(length)知道它就可以用来重新计算前缀必须是什么,所以不需要添加PName到串联中。