现在我有下表:
students | classes |
-------------------------------------
Ally | Math |
Ally | English |
Ally | Science |
Kim | Math |
Kim | English |
我目前正在构建高级搜索功能,您可以在其中按班级搜索并返回拥有这些班级的学生。我想构建一个查询,该查询将返回在“班级”列中具有数学,英语和科学的学生,因此在上述情况下,由于她符合三个班级的条件,因此只会返回其中包含Ally的行。
如果有人有任何建议,我将不胜感激,谢谢。
答案 0 :(得分:1)
我已经稍微重命名了您的表格,但是部分原因是我很懒。这是我想出的:
select student from studentclasses where
class in ('Math', 'English', 'Science')
group by student
having count(*) = 3;
请参见db-fiddle
这个想法是获取与您的搜索相匹配的所有学生类行(基本上是一个OR),并按学生对其进行分组,以便我们可以通过having子句进行限制。我们可以在这里使用>=
,但是如果特定学生的人数超过3,我们搞砸了IN :)如果少于3,则我们缺少一个班级,因此找不到所有班级给那个学生。
唯一的警告是: