我想显示注册了课程100、101的学生ID。如果他们都注册了这两个课程,则只显示一次学生ID。
SELECT studid FROM registration
WHERE courseid='100' or courseid='101';
我不知道如何检查条件-“如果他们都注册了这两个课程,则只显示一次学生ID。”
答案 0 :(得分:2)
您可以使用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;
答案 1 :(得分:0)
要查看学生已注册两门课程而不是其中一门课程的条件,您还需要检查已注册课程的数量:
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)
是否是其中的子集:
select studid
from registration
group by studid
having ku$_objnumset(100,101) submultiset of cast(collect(courseid) as ku$_objnumset);
我使用了通过查询ku$_objnumset
找到的内置all_coll_types
(它属于SYS
,并在dbms_metadata
中使用),但是您可以创建你自己的,例如
create or replace type number_tt as table of number;