想象一下我有这张桌子:
declare @tmpResults table ( intItemId int, strTitle nvarchar(100), intWeight float )
insert into @tmpResults values (1, 'Item One', 7)
insert into @tmpResults values (2, 'Item One v1', 6)
insert into @tmpResults values (3, 'Item Two', 6)
insert into @tmpResults values (4, 'Item Two v1', 7)
还有一个函数,我们称之为 fn_Lev,它接受两个字符串,将它们相互比较,并以整数形式返回它们之间的差异数(即 Levenshtein 距离)。
查询该表的最有效方法是什么,检查每个 strTitle 的 fn_Lev 值与表中的所有其他 strTitle 并删除行彼此相似,Levenshtein 距离为 3,宁愿保持更高的 intWeights?
所以在删除之后,@tmpResults 应该包含
1 Item One 7
4 Item Two v1 7
我可以想办法做到这一点,但没有什么不是非常慢的(即迭代)。我确定有更快的方法吗?
干杯,马特