[英]Find students who registered for both of two courses
我想显示注册了课程100、101的学生ID。如果他们注册了两个课程,则显示一次学生ID。
SELECT studid FROM registration
WHERE courseid='100' or courseid='101';
我不知道如何检查条件-“如果他们都注册了这两个课程,则只显示一次学生ID。”
您可以使用DISTINCT
:
SELECT DISTINCT studid FROM registration WHERE courseid IN ('100', 101');
或GROUP BY
:
SELECT studid FROM registration WHERE courseid IN ('100', '101') GROUP BY studid;
要检查学生已注册两门课程而不只是其中一门课程的条件,您还需要检查已注册课程的数量:
select studid
from registration
where courseid in (100, 101)
group by studid having count(distinct courseid) = 2;
(我已经计算了distinct
课程ID,以防万一学生可以为同一门课程注册两次。如果在您的数据模型中不可能这样做,则count(*)
会很好。)
或者,您可以使用intersect
来查找出现在两个集合中的学生:
select studid
from registration
where courseid = 100
intersect
select studid
from registration
where courseid = 101;
或只是为了好玩,将每个学生的所有同伴收集到一个集合中,然后检查(100,101)
是否(100,101)
子集的子集:
select studid
from registration
group by studid
having ku$_objnumset(100,101) submultiset of cast(collect(courseid) as ku$_objnumset);
我使用了通过查询all_coll_types
(它属于SYS
并在dbms_metadata
)发现的内置ku$_objnumset
,但是您可以创建自己的例如
create or replace type number_tt as table of number;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.