sql-server - SQL Server - 找出子查询中返回的字符串是否包含另一个字符串
问题描述
我有两张桌子。每个 ID 都有单独的行。另一个有一个带有逗号分隔的 ID 列表的字符串。我试图找出第一个表中的 ID 是否出现在第二个表中逗号分隔的 ID 字符串中的任何位置。
这是一个示例(非工作)查询:
select * from
(select 'b' as ID) table1
where table1.ID in
(select 'a,b,c' as CSV_LIST)
当然,这不是IN
工作方式,但我不知道如何解决这个问题。
我曾考虑过使用STRING_SPLIT()
,但在此版本的 SQL Server 中不起作用。我也考虑过使用CONTAINS()
,但我似乎也无法让它工作。
有任何想法吗?
解决方案
如果您无法修复设计,您可以使用Jeff Moden 之LIKE
类的自定义字符串拆分器。
select table1.*
from table1
inner join table2
on table2.csv like '%' + table1.b + '%'
请注意,这不是 SARGable,因为%
正如 Sean 指出的那样,修复设计是最好的,然后是另一个不使用WHILE
循环的拆分函数。
推荐阅读
- java - deepToString 中的这个条件何时会评估为真?
- c# - oData V4 - 返回导致重复记录的未排序数据
- javascript - 文件在 dart html http 调用中转换为 base 64
- c++ - 在 Visual Studio 中使用 vcpkg 使用 paho-mqtt x64 时出错
- typescript - 打字稿:方法中特定类型的一个或多个参数
- user-interface - 网格视图元素在主屏幕上被裁剪?
- javascript - VueJS 中的 v-html 不起作用(空页面)
- c# - 在 Blazor 服务器端显示进行更改的位置
- maven - 在 persistence.xml 中使用 Maven 属性
- r - 仅使用非 NA 单元格替换另一列中的单元格