TSQL - 选择包含列表中所有项目的行
Posted
技术标签:
【中文标题】TSQL - 选择包含列表中所有项目的行【英文标题】:TSQL - select rows that contain all items in list 【发布时间】:2021-09-11 00:59:38 【问题描述】:我以逗号分隔字符串的形式提供了一个关键字列表。我需要查看数据库表中的一列,并以任意顺序返回该列包含所有关键字的所有行。只要该列包含所有关键字,我就会返回该行。
例如:
HeroId HeroName
-------- -------------------------
1 Ironman
2 Superman
3 Spiderman
4 Otherman
查询字符串:'er,man,s'
预期结果:Superman
、Spiderman
说明:只有Superman
和Spiderman
包含关键字er
、man
和s
。
我希望这是有道理的。
【问题讨论】:
【参考方案1】:你可以使用string_split()
和其他一些逻辑:
select t.heroid, t.heroname
from t cross apply
string_split(@query, ',') s
on t.heroname like concat('%', s.value, '%')
group by t.heroid, t.heroname
having count(distinct s.value) = (select count(distinct ss.value) from string_split(@query, ',') ss);
【讨论】:
看起来这个查询返回了至少有一个匹配的所有行......另外,这个语句不是总是正确的having count(distinct s.value) = (select count(distinct ss.value) from string_split(@query, ',') ss);
吗?以上是关于TSQL - 选择包含列表中所有项目的行的主要内容,如果未能解决你的问题,请参考以下文章