A、B表中均有若干记录,现要从B表中模糊查询出符合以A表中的记录为关键字的结果
A表字段:aid(int),aqymch(varchar(100));B表字段:bid(int),bqymch(varchar(100));
举例如下:
A表aqymch字段记录如下:
大福摩托车有限公司
燕京啤酒有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷有限公司B表bqymch字段记录如下:
大福摩托车实业有限公司
天津啤酒有限公司
南嘉包装材料厂
锟铧金属回收有限公司
大沥广凯五金厂
远轻中南铝业有限公司
沥东铝型材制品有限公司
爱和陶陶瓷有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司查询后要求得到的结果如下:
大福摩托车实业有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司
A表字段:aid(int),aqymch(varchar(100));B表字段:bid(int),bqymch(varchar(100));
举例如下:
A表aqymch字段记录如下:
大福摩托车有限公司
燕京啤酒有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷有限公司B表bqymch字段记录如下:
大福摩托车实业有限公司
天津啤酒有限公司
南嘉包装材料厂
锟铧金属回收有限公司
大沥广凯五金厂
远轻中南铝业有限公司
沥东铝型材制品有限公司
爱和陶陶瓷有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司查询后要求得到的结果如下:
大福摩托车实业有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司
第一步:引用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 )
因为a表中的字段作为基准,而且记录一般比b表的短
比如:a 大福摩托车有限公司
b 大福摩托车实业有限公司你第一步中的循环会在每个字符中插入%匹配符,所以用短的才能更好的匹配吧。
另外,按照你的结果,应该用b.*才是你要的结果吧所以我认为应该是:
select b.* from a,b where b.bqymch like dbo.m_fuzzyquery_v1(a.aqymch)
所以我认为应该是:
select b.* from a,b where b.bqymch like dbo.m_fuzzyquery_v1(a.aqymch)
没错