sql - 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'
解决方案
您可以通过尝试在表 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)
话虽如此,数据的结构化方式确实是糟糕的设计,您应该考虑修复数据模型。希望这可以帮助。
推荐阅读
- python - 如何使用 Jinja2 将列表呈现为 HTML
- html - 浏览器在本地机器和测试服务器上呈现不同(甚至是 css 源代码!)
- sql-server - 无法设置用户的 EXECUTE 权限。运行 SQL Server 代理作业时权限被拒绝
- amazon-athena - 如何在 Athena / Presto 中将“2018 年 3 月 31 日”这种格式的日期从字符串转换为日期?
- java - 如何切换到 ehcache 3 的 TickingTimeSource?
- c# - 在 ASP.NET Core 启动期间使用 Serilog 和 Sentry
- android - 为多个应用程序使用相同的工作区
- angular - 显示德国日名和正确的星期数 Angular
- c# - 如何将 this.Controls 动态工具用作矩阵?
- sql-server - 是否可以使用 BCP 从 SQL 导出 CSV 中的每 1000 行?