◆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 '%; ' +