SQL:查找完成课程预要求的学生

SQL:查找完成课程预要求的学生,sql,sqlite,Sql,Sqlite,我有两张桌子: 先决条件:cid,预cid 记录:sid、cid、qtr、年份、年级 我必须找到那些满足某门课的先决条件的学生,他们只在课堂上使用NOT。我目前的查询是: select distinct sid from record where sid not in ( select s.sid from record s, prerequisite p where p.cid = "CSE132X"

我有两张桌子: 先决条件:cid,预cid 记录:sid、cid、qtr、年份、年级

我必须找到那些满足某门课的先决条件的学生,他们只在课堂上使用NOT。我目前的查询是:

select distinct sid
from record
where sid not in (
        select s.sid
        from record s,
            prerequisite p
        where p.cid = "CSE132X"
            and s.cid <> p.precid
            and s.grade < 2
        );
但是,我的查询返回的是那些接受过任何先决条件,而不是所有先决条件的学生。我很难弄清楚如何制作它,以便它检查课程的所有先决条件。

类似这样的内容:


从记录y中选择不同的sid,其中等级>=2且不存在从先决条件中选择*,其中cid='CSE132X'和precid不在记录x中选择cid,其中x.sid=y.sid

示例数据和预期结果集将有助于澄清您实际试图实现的目标。谢谢,我能够使用NOT IN将其转换为查询,并生成正确的输出:从记录y中选择distinct y.sid,其中y.grade>=2,y.sid NOT IN从记录s中选择s.sid,先决条件p,其中p.cid=CSE132X,p.precid不在从记录x中选择x.cid,其中x.sid=y.sid;是的,我知道我需要两个嵌套查询,但在每个嵌套查询中放入什么内容时遇到了困难。我现在明白了,我应该做一个预cid而不是嵌套查询。谢谢大家!@L.S.逻辑X=not not X可以用英语表示为已采用所有先决条件=没有未采用的先决条件。
select distinct r.sid
from record r
where r.sid not in (
    select r.sid
    from prerequisite c
    where c.cid = "CSE132X" and 
    c.pre-cid not in (
          select r2.cid
          from record r2
          where r2.sid = r.sid
    )
);