首页 > 解决方案 > 获取在sql server中以逗号分隔的字符串传递所有ID的所有记录

问题描述

我有两张桌子:一张是导师,另一张是TutorSubject。现在我想得到所有那些以逗号分隔的字符串传递所有科目的导师。例如,下面是我在下面的查询中使用的数据截图:

Select * from TutorSubject where SubjectId in (92, 1, 2, 91)

输出是:

在此处输入图像描述

现在我想要得到的是:我想要得到所有记录或所有拥有所有这些 subjectIds 的导师。意味着特定的 Tutor 应该将所有主题都以字符串形式传递。根据上面的截图结果。我应该只找一位 id 为:31 的导师。

标签: sqlsql-serverperformance

解决方案


如果您想要所有科目的导师,您可以使用group byand having

Select tutorid
from TutorSubject
where SubjectId in (92, 106, 1, 2, 91)
group by tutorid
having count(*) = 5;  -- 5 is the length of the string

如果你想传递这个:

with s as (
      select convert(int, value) as subjectid
      from string_split(@s)
     )
select tutorid
from tutorsubject ts join
     s
     on ts.subjectid = s.subjectid
group by tutorid
having count(*) = (select count(*) from s);

推荐阅读