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

◆SQL高手请进,求一SQL语句
现在有两张表,相关的结构如下:(用的";"号是为了区别数据用的)

id       name       arr1     arr2    
101     A-001       1;         1;
102     A-002       1;2;     1;
103     A-003       3;         3;
104     A-004       4;         3;4;


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

假如现在只知道表二中的id号为1,现需要把表一中所包含有
id号为1的记录全部找出来.显示如下.

表二id       表一id       name       arr1     arr2    
    1               101           A-001       1;         1;
    1               102           A-002       1;2;     1;


这样的SQL语句要怎么写的,谢谢,我想了N久了,还是想不出..

------解决方案--------------------
select 1 as 表二id,* from 表一 where '; '+arr1 like '%;1;% '
or '; '+arr2 like '%;1;% '

------解决方案--------------------
select 1 as 表二id,* from 表一 where patindex( ';1;% ', '; '+arr1)> 0 or patindex( ';1;% ', '; '+arr2)> 0
------解决方案--------------------
select 1 as 表二id,* from 表一 where patindex( ';1;% ', '; '+arr1)> 0 or patindex( ';1;% ', '; '+arr2)> 0

------解决方案--------------------
--创建测试数据
declare @t1 table(id int,name varchar(10),arr1 varchar(10),arr2 varchar(10))
insert @t1 select 101, 'A-001 ', '1; ', '1; '
union all select 102, 'A-002 ', '1;2; ', '1; '
union all select 103, 'A-003 ', '3; ', '3; '
union all select 104, 'A-004 ', '4; ', '3;4; '
declare @t2 table(id int,text1 varchar(20),text2 varchar(20))
insert @t2 select 1, 'aaa;bbb; ', 'ccc;ddd; '
union all select 2, 'eee;fff; ', 'ggg;hhh; '
--查看测试数据
select * from @t1
select * from @t2
--查看结果
select b.id,a.id,a.name,a.arr1,a.arr2
from @t1 a inner join @t2 b
on charindex(cast(b.id as varchar),a.arr1)> 0 or charindex(cast(b.id as varchar),a.arr2)> 0
where b.id=1
/*

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

(所影响的行数为 2 行)
*/
------解决方案--------------------
路过,学习ing...
------解决方案--------------------
select b.id 表二id,a.id 表一id,a.name,a.arr1,a.arr2
from 表一 a,表二 b
where charindex( '; '+ltrim(str(b.id)), '; '+a.arr1+a.arr2)> 0 and b.id=1

------解决方案--------------------
使用PATINDEX的大哥 为什么要在1的前后加上 ; 啊 麻烦告诉一下好吗?