Sql-Server-2000
查找最長匹配前綴
我有兩張桌子:
資料來源:
(SName) (SId) Apple1 100 Apple2 200 Banks 300 BanksB 400 Bankerly 500
前綴:
(PName) (PId) App 1 Bank 2 Banker 3
**我的目標:**找到與每個來源匹配的最長前綴。結果將如下所示:
(SName) (SId) (PName) (PId) Apple1 100 App 1 Apple2 200 App 1 Banks 300 Bank 2 BanksB 400 Bank 2 Bankerly 500 Banker 3
**限制:**我使用的是 SQL Server 2000,無法升級。我知道如何使用分析函式來解決這個問題,但據我所知,它們在 SQL Server 2000 中不可用。
一種方式(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
我假設不允許任何前綴包含諸如
%
會混淆LIKE
搜尋的字元。它使用本文關於 TOP N Per Group Queries 的清單 5 中方法的變體來
PId
將MAX(length)
. 一旦MAX(length)
知道了,它就可以用來重新計算前綴必須是什麼,因此不需要添加PName
到串聯中。