大家好: 最近的项目需要做一种类似效度的检索功能,例如有一个表t1,其中唯一字段为docid,
每次检索该表完成后得到一个该docid的字符串,
如: 1,5,7,11,23,45,123,333,555,789 这种格式,用 , 分割了
第二次检索:5,11,245,23,21,45,333,888
第三次减速:15,111,1245,123,121,45,1333,888
...
第 n次检索:11,555,333,45,222,999 这些数据用上面的格式存储在表 t2 的字段 s中 现在希望每次检索的时候,在原有的条件基础上增加一个效度参数,能够实现如下效果:
传入参数:效度值 v,比如 v = 3,
那么以后从表 t1中检索出数据,要求 t1 的字段docid 在表t2的字段 s 中出现的次数要小于 v = 3 次
如果对照上面的例子,那么 333(出现3次) 和 45(出现4次)就不能再被检索到 其中 v 可变,v>=1谢谢
每次检索该表完成后得到一个该docid的字符串,
如: 1,5,7,11,23,45,123,333,555,789 这种格式,用 , 分割了
第二次检索:5,11,245,23,21,45,333,888
第三次减速:15,111,1245,123,121,45,1333,888
...
第 n次检索:11,555,333,45,222,999 这些数据用上面的格式存储在表 t2 的字段 s中 现在希望每次检索的时候,在原有的条件基础上增加一个效度参数,能够实现如下效果:
传入参数:效度值 v,比如 v = 3,
那么以后从表 t1中检索出数据,要求 t1 的字段docid 在表t2的字段 s 中出现的次数要小于 v = 3 次
如果对照上面的例子,那么 333(出现3次) 和 45(出现4次)就不能再被检索到 其中 v 可变,v>=1谢谢
set @v = 3select * from t1 a
where ... --其他条件
and isnull((select count(*) from t1
where ',' + s + ',' like '%,' + cast(a.docid as varchar(20)) + ',%'
),0)<@v
关键效率很差,设计问题引起的
where (select count(*) from t2 where ','+docid+',' like ','+rtrim(t1.docid)+',')<=3
declare v int
select * from t1
where (select count(*) from t2 where ','+s+',' like ','+rtrim(t1.docid)+',')<=v