PostgreSQL:无法理解现有条件

PostgreSQL: Trouble understanding Exists condition

我在终端中使用 PostgreSQL 9.5.1。我遵循一个教程。有两个表:"is_called" 包含学生的 ID 和姓名,"is_enrolled_on" 包含学生注册的课程。我试图创建 returns 只有未注册任何课程的学生的查询。为此,我使用了 "not exists" 条件,但我不明白为什么没有返回 ID 为 5 的学生,因为他没有注册任何课程。

可能是我对"exists"条件的理解有误。对我来说,"exists" 就像两个关系之间的交集。

问题是子查询只是在没有连接到外部查询的情况下执行。它 returns 行;因此,NOT EXISTS 为 false,没有返回任何行。

要掌握这一点,请从 NOT IN:

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

然后将其转换为NOT EXISTS:

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

我还应该注意 select distinct 不适合 INEXISTS