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

求一个模糊查询的SQL
tableA                       tableB                                 tablcC
A_id     A_name           A_id         C_id                     C_id         C_name
  1             A                   1                 1                           1               C1
                                    1                 2                           2               C2

tableB是tableA与tableC的关联表。

要求根据提供的A_name     或者   C_name       或者两者都有,给出一个A_id   的查询结果。
比如:   A_name   like   %A%     and       C_name   like   %C1%

这个查询SQL怎么写啊?


------解决方案--------------------
set nocount on
---创建表
create table tableA(A_id int,A_name varchar(20))
create table tableB(A_id int,C_id int)
create table tableC(C_id int,C_name varchar(20))
---插入数据
insert into tableA select 1, 'A '
union select 2, 'A1 '

insert into tableB select 1,1
union select 1,2

insert into tableC select 1, 'C1 '
union select 2, 'C2 '
set nocount off
---查询
declare @a varchar(20)
declare @c varchar(20)
set @a= 'A '
set @c= 'c '
select distinct tableA.A_id from tableA left join tableB on tableA.A_Id=tableB.A_id left join tableC on tableB.C_id=tableC.C_id
where (@a is null or @a= ' ' or A_name like '% '+@a+ '% ') and (@c is null or @c= ' ' or C_name like '% '+@c+ '% ')
---删除表
drop table tableA
drop table tableB
drop table tableC


------解决方案--------------------
select a.A_name, c.C_name from tableA a
left join tableB b on a.A_id = b.A_id
left join tableC c on b.C_id = c.C_id
where a.A_name like '%A% ' and c.C_name like '%C1 '