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'

预期结果:SupermanSpiderman

说明:只有SupermanSpiderman包含关键字ermans

我希望这是有道理的。

【问题讨论】:

【参考方案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 - 选择包含列表中所有项目的行的主要内容,如果未能解决你的问题,请参考以下文章

TSQL:如何将单列的行加入/组合成 CSV 列表

Pandas:从列表中选择包含任何子字符串的行

Linq to SQL 选择 DateTime 字段在任何日期范围列表中的行

TSQL按组查找不在另一个列表中的项目

查询数据表字段包含列表中任意项的行<string>

如何在数据表中选择包含新添加记录的行,类似于列表框?