首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

◆SQL,求一综合性较强的SQL语句

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

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


GO
--删除测试环境
Drop Table 表一, 表二, 表三
--结果
/*
idsortidnamearr1arr2
10110A-0011;1;
10210A-0021;2;1;
*/

[解决办法]
---表二的arr1 arr2 都要含有表三的id的话
select b.*
from 表一 a
inner join 表二 b on a.id=b.sortid
inner join 表三 c on charindex(cast(c.id as varchar),b.arr1)> 0 and charindex(cast(c.id as varchar),b.arr2)> 0
where a.sortid = '亚洲 ' And ( '; ' + c.text1 Like '%; ' + 'aaa ' + ';% ' Or '; ' + c.text2 Like '%; ' + 'aaa ' + ';% ')

---表二的arr1 arr2 两者只要有含表三的id的话
select b.*
from 表一 a
inner join 表二 b on a.id=b.sortid
inner join 表三 c on charindex(cast(c.id as varchar),b.arr1)> 0 or charindex(cast(c.id as varchar),b.arr2)> 0
where a.sortid = '亚洲 ' And ( '; ' + c.text1 Like '%; ' + 'aaa ' + ';% ' Or '; ' + c.text2 Like '%; ' + 'aaa ' + ';% ')
[解决办法]
不会,观注 一下了.

[解决办法]
学习了
随便接分

热点排行