******实在没有分了,小小的查询问题*******

seesea125 2007-04-07 06:40:19
我想从一个表里根据关键字(querytext)查询出来相关的记录,如果查询出来记录不够5条,就用这个新闻类型(infoflag )的最新录入的给拿出来补够5条,怎么做呢?
表结构
id name querytext infoflag inputtime
序号 名字 关键字 新闻类型 录入时间
...全文
292 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hillhx 2007-04-09
  • 打赏
  • 举报
回复
--添加辅助列,确保,如果=关键字的够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
huming_h 2007-04-08
  • 打赏
  • 举报
回复

dawugui 2007-04-08
  • 打赏
  • 举报
回复
如楼上所说,考虑有所不周.改一下.

select top 5 * from
(
select * from tb where querytext = '关键字'
union all
select top 5 * from tb where querytext <> '关键字' order by inputtime desc
) t
OracleRoob 2007-04-07
  • 打赏
  • 举报
回复
--添加辅助列,确保,如果=关键字的够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
dawugui 2007-04-07
  • 打赏
  • 举报
回复
select top 5 * from
(
select * from tb where querytext = '关键字'
union all
select top 5 * from tb order by inputtime desc
) t
ankor 2007-04-07
  • 打赏
  • 举报
回复

if(5-sum(select count(*) from 表))>0
insert 表 select * from 表 where infoflag in (select top 5-sum(select count(*) from 表 order by inputtime desc ) )
不知道楼主是不是这个意思 `
逻辑关系讲得不太明白

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧