簡體   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