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

关于子查询解决方案

2013-09-06 
关于子查询有这样一个表tblcol1col2--------------------------------------------------1111,12,13,14,15

关于子查询
有这样一个表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 行受影响)
*/

热点排行