请教一个近似记录的查询

Gunu40 2009-03-13 01:20:25
请各位帮忙想个办法,先谢咯。

要求是得到一组与给定记录相似的记录。

例如, 有个Person表, 有5个查询关键字段: 性别、学历、籍贯、职位和民族。 5个字段都不考虑其值的连续性。

指定其中一条记录后,要用这5个关键字来搜索最相近的n条记录。

首先是5个值都相同的;
跟着其中4个值相同的,其中按关键字的匹配情况排序,也就是性别、学历、籍贯和职位这4个值相同的排在前面,以此类推,学历、籍贯、职位和民族都相同的排在最后;
一下是3个值相同的,排列顺序同上;
再以下是2个,1个值相同的。

我现在环境是SQL2008, 该表的数据量在10万条左右,增量<100条/天。以后这个搜索可能会增加关键字到10个左右,甚至包括其子表的字段,子表与主表的记录数约是5:1.
如何实现呢?TSQL? 还是有其他技术能帮助实现,比如全文检索和MDX等等。
...全文
49 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gunu40 2009-03-13
  • 打赏
  • 举报
回复
先附上例子数据和输出:


declare @Person table([姓名] nvarchar(20),性别 nvarchar(20),学历 nvarchar(20),职位 nvarchar(20),籍贯 nvarchar(20),民族 nvarchar(20))
Insert into @Person
select '赵1','女','高中','经理','上海','汉'
union all select '钱2','男','中专','职员','四川','汉'
union all select '孙3','女','高中','经理','上海','蒙'
union all select '李4','男','高中','经理','重庆','汉'
union all select '周5','女','高中','经理','上海','汉'
union all select '吴6','男','小学','职员','广东','汉'
union all select '郑7','女','中专','经理','上海','汉'
union all select '王8','男','高中','经理','上海','满'
union all select '冯9','女','高中','经理','重庆','回'
union all select '陈0','男','高中','经理','广东','汉'

select * from @Person


例如以赵1作为标准,得到与赵1相近的7条记录
需要的输出
姓名 ,性别 ,学历 ,职位, 籍贯 ,民族
周5 女 高中 经理 上海 汉 --这一条因为5个关键字都相等所以排在最前
孙3 女 高中 经理 上海 蒙 --这一条因为前4个关键字都相等所以排在这里
郑7 女 中专 经理 上海 汉 --这一条也有4个关键字相同,但是由于[学历]的关键性大于[民族],所有排这里
李4 男 高中 经理 重庆 汉 --这一条也有4个关键字相同,但是由于最高关键字[性别]不等,所有排4个相同的最后
冯9 女 高中 经理 重庆 回 --这一条因为前3个关键字都相等所以排在3关键字相同的最前
王8 男 高中 经理 上海 满 --这一条因为较靠前3个关键字都相等所以排在3关键字相同的较靠前
陈0 男 高中 经理 广东 汉 --如上述逻辑

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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