大家好:    最近的项目需要做一种类似效度的检索功能,例如有一个表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谢谢

解决方案 »

  1.   

    declare @v int
    set @v = 3select * from t1 a
    where ...  --其他条件
    and isnull((select count(*) from t1
    where ',' + s + ',' like '%,' + cast(a.docid as varchar(20)) + ',%'
    ),0)<@v
    关键效率很差,设计问题引起的
      

  2.   

    select * from t1 
     where (select count(*) from t2 where ','+docid+',' like ','+rtrim(t1.docid)+',')<=3
      

  3.   


    declare v int
    select * from t1 
     where (select count(*) from t2 where ','+s+',' like ','+rtrim(t1.docid)+',')<=v
      

  4.   

    或者几表存一表存检索次数 一表存docid