首页 > 解决方案 > 如何比较两个不同的逗号分隔字符串值并检查第一个中是否存在来自不同逗号分隔字符串的任何值

问题描述

我希望我能很好地解释这一点。如果有不清楚的地方,请询问

我有一个查询来检索他/她可以访问某些实体的用户的数据。

基本上在我的用户表中有一列用户可以有一个或多个逗号分隔的整数。以下是一些示例:

表格1

User #1 value: ,1,
User #2 value: ,1,3,5,12,
User #3 value: ,12,
User #4 value: ,14,3,5, 
User #5 value: ,14, 

我的秒表有一个非常相似的字段。如果我的第二个表中有与此类似的记录:

表#2

User #1 value: ,3,
User #2 value: ,3,
User #3 value: ,3,
User #4 value: ,10,
User #5 value: ,11,5,12,
User #6 value: ,5,12,

所以我想要实现的是从表#1 中获取例如用户#2 的值,并且我想获取表#2 中的所有用户,其中他们的任何值都包含在用户#2 的值中。因为用户 #2 有 ,1,3,5,12,我应该从表 #2 中得到结果,如下所示:

User #1 
User #2
User #3
User #5 
User #6

我目前正在使用以下内容:

SELECT a.Name
FROM TABLE2 a
WHERE
CharIndex(','+convert(varchar,a.Agency)+',',(Select Agency from TABLE1 where UserID = 123)) > 0

这似乎并没有产生我正在寻找的结果。如果 TABLE #1 中只有 1 个值,例如 ,3,但没有多个值,这将非常有用。

标签: sqlsql-server-2008

解决方案


您可以尝试以下查询以获得预期结果。

SELECT DISTINCT a.Name
FROM TABLE2 a,
     dbo.Split((SELECT Agency
                  FROM TABLE1
                  WHERE UserID = 2),',') AS b
WHERE a.Agency LIKE '%,'+b.Slit_Func_ColumnName+',%'

使用SPLIT功能。


推荐阅读