日期:2014-05-17  浏览次数:20668 次

关于子查询
有这样一个表tbl
col1     col2
--------------------------------------------------
11       11,12,13,14,15
21       21,22,23,24,25
31       21,22,23
然后有一个函数fun1可以把col2的字符串按照逗号分隔,返回值是一个表
也就是说
select * from fun1('11,12,13,14,15', N',')
的结果是
aaa
------------------
11
12
13
14
15

想要完成的功能是找出col1在col2里存在的
比如上面的第一条和第二条符合,第三条不符合

select * from tbl as t1
inner join tbl as t2 on
t1.col1 in (select * from (fun1(t2.col2, N',')))
感觉这样是可以实现的

请问有没有可以不用子查询的方法

------解决方案--------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go 
create table [tb]([col1] int,[col2] varchar(14))
insert [tb]
select 11,'11,12,13,14,15' union all
select 21,'21,22,23,24,25' union all
select 31,'21,22,23'
--------------开始查询--------------------------
select a.col1 from tb a,tb b where a.col1=b.col1 and CHARINDEX(','+ltrim(a.col1)+',',','+b.col2+',')>0
----------------结果----------------------------
/* col1
-----------
11
21

(2 行受影响)
*/