繁体   English   中英

查找与逗号分隔的值在同一行中的行

[英]Find rows which are in a row with comma separated values same table sql

我有一个包含逗号分隔值的表,例如

id locs
1  a,s,d,f
2  s,d,f,a
3  d,s,a,f
4  d,f,g,a
5  a,s,e
6  f,d

当我用逗号分隔的ID为1的字符串时,我需要在sql服务器中放入1,2,3,6。

这意味着我已经获取了id 1的位置并用逗号分隔,现在我想要所有包含id 1分隔值的id。

注意:我知道我不必在表中保留逗号分隔的值,但是它发生了。

希望我对我的问题很清楚。

如果我理解正确,则需要返回所选行的locs列中至少具有逗号分隔值之一的所有行的id值。 由于这是一个较差的数据库设计,因此只能解决这个问题。 首先创建一个用户定义的函数,以将逗号分隔的值拆分为一个表。 有很多方法可以做到, 这是google发现的第一个方法

DECLARE @Values varchar(max)
SELECT @Values = Locs 
FROM Table WHERE Id = @Id 

SELECT Id
FROM Table INNER JOIN dbo.Split(@Values) SplitedString
ON( '%,'+ SplitedString.s+',%' LIKE ',' + Locs + ',')
declare @tb table (id int, locs varchar(50))
insert into @tb values(1,  'a,s,d,f'),
(2,'s,d,f,a'),
(3,'d,s,a,f'),
(4,'d,f,g,a'),
(5,'a,s,e'),
(6,'f,d')
declare @cta varchar(20)='s,d,f,a'
;with cte0(id,col2)
as
(
select id,t.c.value('.','varchar(max)') as col2 from (select id,x= cast('<t>'+replace(locs,',','</t><t>') +'</t>'  as xml) from @tb) a cross apply x.nodes('/t') t(c)
)
select distinct id from cte0 where  @cta  like '%'+col2+'%' and id not in( select distinct id from cte0 where @cta not like '%'+col2+'%')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM