PostgreSQL:无法理解存在条件

Posted

技术标签:

【中文标题】PostgreSQL:无法理解存在条件【英文标题】:PostgreSQL: Trouble understanding Exists condition 【发布时间】:2016-05-18 14:26:47 【问题描述】:

我在终端中使用 PostgreSQL 9.5.1。我按照教程。有两个表:“is_call”包含学生的 id 和姓名,“is_enrolled_on”包含学生注册的课程。我试图创建只返回未注册任何课程的学生的查询。为此,我使用了“不存在”条件,但我不明白为什么 id 为 5 的学生没有被退回,因为他没有注册任何课程。

也许是我对“存在”条件的理解是错误的。对我来说,“存在”就像两个关系之间的交集。

【问题讨论】:

向子查询添加 where 子句。 【参考方案1】:

问题是子查询只是简单地执行而没有连接到外部查询。它返回行;因此,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

【讨论】:

以上是关于PostgreSQL:无法理解存在条件的主要内容,如果未能解决你的问题,请参考以下文章

无法创建用户 postgres:角色“postgres”不存在

postgres 错误:Postgresql 11.6 中的列不存在错误

postgresql数据库 postgres账号无法登录及解决办法

Docker Compose 无法从数据库 (jdbc:postgresql://db:5432/postgres) 为用户“postgres”获取连接:连接尝试失败

设置 PostgreSQL,无法连接到数据库 postgres

Postgresql 角色无法访问其创建的架构