日期:2014-05-19  浏览次数:20477 次

******实在没有分了,小小的查询问题*******
我想从一个表里根据关键字(querytext)查询出来相关的记录,如果查询出来记录不够5条,就用这个新闻类型(infoflag   )的最新录入的给拿出来补够5条,怎么做呢?
表结构
id         name       querytext     infoflag           inputtime
序号     名字       关键字             新闻类型           录入时间


------解决方案--------------------
select top 5 * from
(
select * from tb where querytext = '关键字 '
union all
select top 5 * from tb order by inputtime desc
) t
------解决方案--------------------
--添加辅助列,确保,如果=关键字的够5条,一定先取这5条,否则,取完这几条后,再按时间倒排序获取数据
--不要用union all,因为可能不满足5条时,刚好也是最近输入的,可能会显示重复行

select top 5 *
from
(
select *,1 as ID from tb where querytext = '关键字 '
union
select top 5 *,2 as id from tb order by inputtime desc
) t
order by id,inputtime desc

------解决方案--------------------
--添加辅助列,确保,如果=关键字的够5条,一定先取这5条,否则,取完这几条后,再按时间倒排序获取数据
--不要用union all,因为可能不满足5条时,刚好也是最近输入的,可能会显示重复行


楼上说的不错

不过UNION 本身就会去重复行,只要不用UNION ALL 而且选TOP 10 就好了
select top 5 *
from
(
select * from tb where querytext = '关键字 '
union
select top 10 * as id from tb order by inputtime desc
) t
order by id,inputtime desc