求有交集的列的查询
1002001,1002003
1002001
1002001,1002002,1002015
1002001,1002002,1002007
1002001,1002002
1002001,1002002
以上为数据的一列a varchar(50)里面的 每行有自己的id
现在存储过程传进来一个结构如上的字符串 比如@ids=1002001,1002002,1002007 .@ids可以为一个或多个值得逗号连接。
需要查询出 上面的数据里面 所有根 @ids有交集的行。
我的思路是 写一个函数 传进@ids 返回所有行的id逗号隔开的串@rid
然后查询语句调用函数 使用select * from table where id in(函数名(@ids))
但是不知道怎么组织这样的串希望高手指点指点。或者有更好的解决办法请帮忙一下哦
谢谢了。
CREATE function dbo.isHasIntersection(@ids varchar(50),@field varchar(50))
returns varchar(50) as
begin
declare @rid varchar(50)/*返回的行的id*/
set @rid=''
set @ids=@ids+','
while charindex(',',@ids)>0
begin
declare @lid varchar(20) /*临时id*/
declare @tempid varchar(20)/*临时存储的id*/
set @lid=left(@ids,charindex(',',@ids)-1)
/*这里开始不知道怎么写了*/
select @tempid=[id] from table where charindex(@lid,@field)>0
set @rid=@rid+@tempid+','
set @ids=right(@ids,len(@ids)-charindex(',',@ids))
/*上面的@tempid因为有很多行感觉返回的是行的数不是数据*/
set @rid=left(@rid,len(@rid)-1)
end
return @rid
end