首页 > 解决方案 > SQL 查找具有多个可能值的列

问题描述

我有两张桌子:

表格1

ID |    NAME   | VALUE
1  |TEST1      | '101;103;102;100'
2  |TEST2      | '101;102'

表 2

|VALUE |
| 100  |
| 102  |

我需要表 1 中的行,其中我可以拥有表 2 中的所有值。表 2 中的值是动态的,因此我需要创建一个过程来搜索这些可能的值。

我的输出应该在那个例子中:

1  |TEST1      | '101;103;102;100'

标签: sqlsplit

解决方案


您可以通过尝试在表 1 中查找表 2 的值来执行此操作。然后您可以确保所有值都已连接。在 SQL Server 中,这样的事情可以工作:

;with table1 as
(select 1 as ID,'test1' as name,'101;103;102;100' as Value union
select 2 as ID,'test2' as name,'101;102' as Value),
table2 as
(select '100' as value union select '102' as value)

select distinct a.ID,a.name,a.Value,count(*) as cnt
from table1 a
inner join table2 b on CHARINDEX(b.value,a.value,1)>0
Group by a.ID,a.name,a.Value
having count(*)=(select count(*) from table2)

话虽如此,数据的结构化方式确实是糟糕的设计,您应该考虑修复数据模型。希望这可以帮助。


推荐阅读