A、B表中均有若干记录,现要从B表中模糊查询出符合以A表中的记录为关键字的结果
A表字段:aid(int),aqymch(varchar(100));B表字段:bid(int),bqymch(varchar(100));
举例如下:
A表aqymch字段记录如下:
大福摩托车有限公司
燕京啤酒有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷有限公司B表bqymch字段记录如下:
大福摩托车实业有限公司
天津啤酒有限公司
南嘉包装材料厂
锟铧金属回收有限公司
大沥广凯五金厂
远轻中南铝业有限公司
沥东铝型材制品有限公司
爱和陶陶瓷有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司查询后要求得到的结果如下:
大福摩托车实业有限公司
华豪铝型材有限公司
汇泰龙五金卫浴制造有限公司
创美(广东)印铁制罐有限公司
五华一建
和美陶瓷有限公司
利华陶瓷实业有限公司

解决方案 »

  1.   

    select * from a,b where charindex(a.aqymch,b.aqymch)>0
      

  2.   

    http://topic.csdn.net/u/20090811/23/b16f7081-4597-4835-8455-ebff6095d7d8.html?36587
      

  3.   

    select * from a,b where aqymch=bqymch
      

  4.   

    自己的暂时的解决方法(望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 )
      

  5.   

    不好意思,开始没有理解模糊二字。你的方法应该可行,但是感觉应该反过来。函数中的参数要用a表中的字段。
    因为a表中的字段作为基准,而且记录一般比b表的短
    比如:a 大福摩托车有限公司
          b 大福摩托车实业有限公司你第一步中的循环会在每个字符中插入%匹配符,所以用短的才能更好的匹配吧。
    另外,按照你的结果,应该用b.*才是你要的结果吧所以我认为应该是:
    select b.* from a,b where b.bqymch like dbo.m_fuzzyquery_v1(a.aqymch)
      

  6.   

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