2016-05-18 9 views
0

私はPostgreSQL 9.5.1を端末に使用しています。私はチュートリアルに従います。 2つのテーブルがあります:生徒のIDと名前を持つ「is_called」、生徒が登録されているコースと「is_enrolled_on」です。私はどのコースにも登録されていない学生のみを返すクエリを作成しようとしました。そのために、私は「存在しない」状態を使用しましたが、ID 5の生徒がどのコースにも入学していないため返されない理由を理解できません。PostgreSQL:問題の理解あり条件

「存在する」状態が間違っていると私が理解しているかもしれません。私の場合、「存在する」は2つの関係の交わりのように機能します。

Description of the queries in the terminal

+0

サブクエリにwhere句を追加します。 –

答えて

2

問題はサブクエリを単に外側のクエリに接続なしで実行されることです。行を返します。したがって、NOT EXISTSはfalseであり、行は戻されません。

select i.studentid 
from is_called i 
where i.studentid not in (select io.studentid from is_enrolled_on io); 

その後NOT EXISTSにこれを変換します:、これのこつを得るNOT INで開始する

select i.studentid 
from is_called i 
where not exists (select 1 from is_enrolled_on io where io.studentid = i.studentid); 

私はまたselect distinctINまたはEXISTSのいずれかのために適切ではないことに注意してください。