请教关于sqlserver2008复杂的效度和重复性检索,具体描述见问题题干
时间:2011-12-03
来源:互联网
最近的项目需要做一种类似效度的检索功能,例如有一个表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 的字段 smark中
现在希望每次检索的时候,在原有的条件基础上增加一个效度参数,能够实现如下效果:
传入参数:效度值 v,比如 v = 3,
那么以后从表 t1中检索出数据,要求 t1 的字段docid 在表t2的字段 smark 中出现的次数要小于 v = 3 次
如果对照上面的例子,那么 333(出现3次) 和 45(出现4次)就不能再被检索到
其中 v 可变,v>=1
谢谢
作者: chilli6519 发布时间: 2011-12-03
set @v = 3
select * from t1 a
where ... --其他条件
and isnull((select count(*) from t1
where ',' + smark + ',' like '%,' + cast(a.docid as varchar(20)) + ',%'
),0)<@v
关键效率很差,设计问题引起的
作者: Haiwer 发布时间: 2011-12-03
select * from t1 where (select count(*) from t2 where ','+docid+',' like ','+rtrim(t1.docid)+',')<=3
作者: ssp2009 发布时间: 2011-12-03
declare v int select * from t1 where (select count(*) from t2 where ','+smark+',' like ','+rtrim(t1.docid)+',')<=v
作者: ssp2009 发布时间: 2011-12-03
关键效率很差,……
declare @v int
set @v = 3
select * from t1 a
where ... --其他条件
and isnull((select count(*) from t1
where ',' + smark + ',' like '%,' + cast(a.docid as varchar(20)) + ',%'
),0)<@v
作者: chilli6519 发布时间: 2011-12-03
第二次检索 5
第二次检索 11
第二次检索 。。。
不要用拆分的
作者: fredrickhu 发布时间: 2011-12-03
一表存检索次数 一表存docid
作者: fredrickhu 发布时间: 2011-12-03
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28