******实在没有分了,小小的查询问题*******
我想从一个表里根据关键字(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