繁体   English   中英

查找同时注册两门课程的学生

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM