加两个表:
黑店表(badshop): userid,shopid,crdate
黑货表(badprod): userid,prodid,crdate示例:某用户查询他想看到的商品的关键语句:
select * from
(
select *,rn=row_number() over(order by xx)
from 你原来的结果集 a
left join badprod b on b.userid=@userid and a.prodid=b.prodid
where 你原来的条件集 and b.prodid is null
) t
where rn between 100 and 110
黑店表(badshop): userid,shopid,crdate
黑货表(badprod): userid,prodid,crdate示例:某用户查询他想看到的商品的关键语句:
select * from
(
select *,rn=row_number() over(order by xx)
from 你原来的结果集 a
left join badprod b on b.userid=@userid and a.prodid=b.prodid
where 你原来的条件集 and b.prodid is null
) t
where rn between 100 and 110
解决方案 »
- 一个convert的问题
- 求2句SQL语句 MYsql数据库的
- 非常着急盼着解答,各位帮帮忙!求助“Dynamic SQL is generated on the fly by a generic piece of code.......on the fly,技术上怎么解
- 设备‘ d:\program files\Microsoft sql server \mssql\backup\asp600_data.mdf'的文件不是有效的microsoft磁带格式备份集。Restore Data
- 组合以下insert into语句
- 在SQLserver 中用sql怎么把一个月分成4个星期来统计数据
- MS SQL SERVER企业管理器的怪问题
- 本地计算机上的sql server agent 服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报“服务"
- 数据库中某些字段隐含了 \r\n 这样的字符,把数据拷贝出来是类似空格的一段东西,返回xml时就变成\r\n,如何replace
- 高手都进来看看,如何来优化处理
- 如何提高表之间转移数据的速度?
- 如何给表中的字段做一个标记
查询时,把黑货表中的数据剔除掉。剔除的方式无非有:
1. not in
2. not exists
3. left join + null的判断
4. 正向、逆向判断结合:建一个 用户-商品表:userid,prodid,isvisible,crdate.isvisible的0和1分别表示存的是红货还是黑货。这样可以根据数据量来灵活存储,但逻辑更加复杂。我给出的是第3种方案的示例。用原结果集去left join badprod,如果不在badprod表中,则badprod.prodid将会是null,也就是我们需要的记录。
另外,row_number()是2005的排序函数,如果是2000的话,就用其它方式分页,比如top+order by.