2017-02-11 4 views
0

私は次の2つのテーブルを持っています: 前提条件:(cid、pre-cid) (レコード:sid、cid、qtr、year、grade)SQL:コース前提条件を満たす学生を探す

特定のクラスの前提条件を満たす生徒は、NOT INだけを使用して見つける必要があります。私の現在のクエリは次のとおりです。

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 
     ); 

しかし、私のクエリは任意の前提条件ではなく、すべての前提条件をとっている学生を返します。コースのすべての前提条件をチェックするようにする方法を考え出すのが難しいです。このような

+0

期待される結果セットと一緒にサンプル・データは、あなたが実際に達成しようとしているものを明確にするのに役立ちます。 –

答えて

1
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 
    ) 
); 
+0

はい、私は2つのネストされたクエリが必要であることを知っていましたが、各ネストされたクエリに何を入れるのか非常に困難でした。私はネストされたクエリではない事前cidを実行するはずだったことを今理解しています。ありがとうございました! –

+0

@ L.S。論理「X = not not X」は、「すべての前提条件を取っている=前提条件がない」と英語で表現することができる。 –

0

何か:

select distinct sid from record y where grade>=2 and not exists(select * from prerequisite where cid='CSE132X' and precid not in (select cid from record x where x.sid=y.sid));

+0

ありがとうございました。私はNOT INのみを使用してこれをクエリに変換し、正しい出力を生成することができました: レコードyから別のy.sidを選択します。ここで、y.grade> = 2およびy.sidは レコードsからの.sid、前提条件pここで、p.cid = "CSE132X" とp.precidには含まれていません(レコードxからx.cidを選択します。x.sid = y.sid)); –

関連する問題