两表之间的模糊查询

jmqnwpu 2012-07-09 10:39:01
A、B表中均有若干记录,现要从B表中模糊查询出符合以A表中的记录为关键字的结果
A表字段:aid(int),aqymch(varchar(100));B表字段:bid(int),bqymch(varchar(100));
举例如下:
A表aqymch字段记录如下:
大福摩托车有限公司
燕京啤酒有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷有限公司

B表bqymch字段记录如下:
大福摩托车实业有限公司
天津啤酒有限公司
南嘉包装材料厂
锟铧金属回收有限公司
大沥广凯五金厂
远轻中南铝业有限公司
沥东铝型材制品有限公司
爱和陶陶瓷有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司

查询后要求得到的结果如下:
大福摩托车实业有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司
...全文
127 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmqnwpu 2012-07-10
  • 打赏
  • 举报
回复
quchen520:
所以我认为应该是:
select b.* from a,b where b.bqymch like dbo.m_fuzzyquery_v1(a.aqymch)
没错
quchen520 2012-07-09
  • 打赏
  • 举报
回复
select * from a,b where aqymch=bqymch
jmqnwpu 2012-07-09
  • 打赏
  • 举报
回复
具体如何实现呢
--小F-- 2012-07-09
  • 打赏
  • 举报
回复
没注意看 你这样的匹配估计需要全文索引才能完成了。
--小F-- 2012-07-09
  • 打赏
  • 举报
回复
select * from a,b where charindex(a.aqymch,b.aqymch)>0
quchen520 2012-07-09
  • 打赏
  • 举报
回复
不好意思,开始没有理解模糊二字。

你的方法应该可行,但是感觉应该反过来。函数中的参数要用a表中的字段。
因为a表中的字段作为基准,而且记录一般比b表的短
比如:a 大福摩托车有限公司
b 大福摩托车实业有限公司

你第一步中的循环会在每个字符中插入%匹配符,所以用短的才能更好的匹配吧。
另外,按照你的结果,应该用b.*才是你要的结果吧

所以我认为应该是:
select b.* from a,b where b.bqymch like dbo.m_fuzzyquery_v1(a.aqymch)
jmqnwpu 2012-07-09
  • 打赏
  • 举报
回复
自己的暂时的解决方法(望maco_wang、fredrickhu等指点 ):
第一步:引用maco_wang 【叶子函数分享四】综合模糊查询
--创建函数

create function [dbo].[m_fuzzyquery_v1]

(

@str nvarchar(2000)

)

returns nvarchar(2000)

as

begin

declare @count int,@i int;

declare @newchar nvarchar(200),@nn nvarchar(300),@hh nvarchar(200)

set @count=len(@str);set @i=1;set @nn='';

while @i<@count+1

begin

set @newchar=substring(@str,@i,1)+'%'

set @nn=@nn+@newchar;

set @i=@i+1;

end

set @hh='%'+@nn

return @hh

end
第二步:引用fredrickhu思路:
select * from a,b where a.aqymch like dbo.m_fuzzyquery_v1(b.bqymch)
一个注意点:
特别说明:
如果数据量比较大,尽量避免使用自定义函数,以免严重影响性能。(引用maco_wang )

22,209

社区成员

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

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