日期:2014-05-18  浏览次数:20489 次

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

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

查询后要求得到的结果如下:
大福摩托车实业有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司

------解决方案--------------------
SQL code
select * from a,b where charindex(a.aqymch,b.aqymch)>0

------解决方案--------------------
不好意思,开始没有理解模糊二字。

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

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

所以我认为应该是:
select b.* from a,b where b.bqymch like dbo.m_fuzzyquery_v1(a.aqymch)