首页 > 解决方案 > 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(),但我似乎也无法让它工作。

有任何想法吗?

标签: sql-serversql-server-2008

解决方案


如果您无法修复设计,您可以使用Jeff Moden 之LIKE类的自定义字符串拆分器。

select table1.*
from table1
inner join table2
on table2.csv like '%' + table1.b + '%'

请注意,这不是 SARGable,因为%正如 Sean 指出的那样,修复设计是最好的,然后是另一个不使用WHILE循环的拆分函数。


推荐阅读