当前位置: 代码迷 >> Sql Server >> ,sql中模糊匹配
  详细解决方案

,sql中模糊匹配

热度:99   发布时间:2016-04-27 15:29:30.0
求助,sql中模糊匹配!
有这样两个表:

表A
id soft_name company
----------------------
A office 2000 microsoft
A mcafee agent mcafee
A vnc33 vnc
A qq2007 qq
A game1 game1
A game2 game2
B office 2003 microsoft
B vnc4.0 vnc
B mcafee8i mcafee
B microsoft microsoft 
B game3 game3

表B
id name 
----------
1 office
2 mcafee
3 vnc
4 microsoft

现在要用一条SQL语句,从表A的soft_name中将含有表B中name(模糊匹配)的排除,得到如下结果:
id soft_name company
------------------
A qq2007 qq
A game1 game1
A game2 game2
B game3 game3


help!!




  
 


------解决方案--------------------
SQL code
--原始数据:@Adeclare @A table(id varchar(1),soft_name varchar(12),company varchar(9))insert @Aselect 'A','office 2000','microsoft' union allselect 'A','mcafee agent','mcafee' union allselect 'A','vnc33','vnc' union allselect 'A','qq2007','qq' union allselect 'A','game1','game1' union allselect 'A','game2','game2' union allselect 'B','office 2003','microsoft' union allselect 'B','vnc4.0','vnc' union allselect 'B','mcafee8i','mcafee' union allselect 'B','microsoft','microsoft' union allselect 'B','game3','game3'--原始数据:@Bdeclare @B table(id int,name varchar(9))insert @Bselect 1,'office' union allselect 2,'mcafee' union allselect 3,'vnc' union allselect 4,'microsoft'select * from @A a where not exists (select 1 from @B where charindex(name,a.soft_name)>0)/*id   soft_name    company   ---- ------------ --------- A    qq2007       qqA    game1        game1A    game2        game2B    game3        game3*/
------解决方案--------------------
SQL code
declare @a table(id varchar(2),  soft_name  varchar(20) ,          company  varchar(20))insert @a select 'A',   'office 2000',           'microsoft'  union all select 'A',   'mcafee agent',          'mcafee'  union all select 'A',   'vnc33',                 'vnc'  union all select 'A',   'qq2007',                'qq'  union all select 'A',   'game1',                 'game1'  union all select 'A',   'game2',                 'game2'  union all select 'B',   'office 2003',           'microsoft'  union all select 'B',   'vnc4.0',                'vnc'  union all select 'B',   'mcafee8i',              'mcafee'  union all select 'B',   'microsoft',             'microsoft'   union all select 'B',   'game3',                 'game3'  declare @b table(id int,  name   nvarchar(20))insert @b select 1,    'office'  insert @b select 2,    'mcafee'  insert @b select 3,    'vnc'  insert @b select 4,    'microsoft'--或用patindex/charindex select a.* from @a a where not exists(select 1 from @b where  patindex( '%'+Name+'%',a.soft_name)>0 ) id   soft_name            company              ---- -------------------- -------------------- A    qq2007               qqA    game1                game1A    game2                game2B    game3                game3
------解决方案--------------------
select a.* from @a a where not exists(select 1 from @b where a.soft_name like '%'+Name+'%' ) 
  相关解决方案