日期:2014-05-19  浏览次数:20485 次

◆SQL高手请进,求一综合性较强的SQL语句
又是SQL,好怕,自己基础又薄弱,只有再次请教高手了,谢谢.

表一:
id   sortid
10     亚洲
11     欧洲
12     美洲

表二:
id       srotid     name       arr1     arr2    
101         10         A-001       1;         1;
102         10         A-002       1;2;     1;
103         11         A-003       3;         3;
104         11         A-004       4;         3;4;

表三:
id       text1                 text2
1         aaa;bbb;         ccc;ddd;
2         eee;fff;         ggg;hhh;


现在假如客户输入 "亚洲   aaa "我要搜索出以下纪录:(注:因为arr1与arr2里面含有记录表三中的含有 "aaa "的ID号,此例表三中含有"aaa "的ID号为1。对了,还需要考虑模糊搜索.)

id       srotid     name       arr1     arr2    
101         10         A-001       1;         1;
102         10         A-002       1;2;     1;


再次谢谢了.

------解决方案--------------------
没看明白这个和表3有什么关系
------解决方案--------------------
用个函数分拆

------解决方案--------------------
select b.*
from tb1 a,tb2 b,tb3 c
where a.id=b.srotid and
( '; '+c.id like '%; '+b.arr1+ ';% ' or '; '+c.id like '%; '+b.arr2+ ';% ') and
a.sortid= '亚洲 ' and
( '; '+ 'aaa '+ '; ' like '%; '+c.text1+ ';% ' or '; '+ 'aaa '+ '; ' like ' '%; '+c.text2+ ';% ')
------解决方案--------------------
--创建测试环境
Create Table 表一
(id Int,
sortid Nvarchar(10))
Insert 表一 Select 10, N '亚洲 '
Union All Select 11, N '欧洲 '
Union All Select 12, N '美洲 '

Create Table 表二
(id Int,
sortid Int,
name Varchar(10),
arr1 Varchar(20),
arr2 Varchar(20))
Insert 表二 Select 101, 10, 'A-001 ', '1; ', '1; '
Union All Select 102, 10, 'A-002 ', '1;2; ', '1; '
Union All Select 103, 11, 'A-003 ', '3; ', '3; '
Union All Select 104, 11, 'A-004 ', '4; ', '3;4; '

Create Table 表三
(id Int,
text1 Varchar(20),
text2 Varchar(20))
Insert 表三 Select 1, 'aaa;bbb; ', 'ccc;ddd; '
Union All Select 2, 'eee;fff; ', 'ggg;hhh; '
GO
--测试
Select B.*
From 表一 A
Inner Join 表二 B On A.id = B.sortid
Inner Join 表三 C On ( '; ' + B.arr1 Like '%; ' + Cast(C.id As Varchar) + ';% ') And ( '; ' + B.arr2 Like '%; ' + Cast(C.id As Varchar) + ';% ')
Where A.sortid = N '亚洲 ' And ( '; ' + C.text1 Like '%; ' + 'aaa ' + ';% ' Or '; ' + C.text2 Like '%; ' +