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
不适合IN
或EXISTS
。
【讨论】:
以上是关于PostgreSQL:无法理解存在条件的主要内容,如果未能解决你的问题,请参考以下文章
无法创建用户 postgres:角色“postgres”不存在
postgres 错误:Postgresql 11.6 中的列不存在错误
postgresql数据库 postgres账号无法登录及解决办法
Docker Compose 无法从数据库 (jdbc:postgresql://db:5432/postgres) 为用户“postgres”获取连接:连接尝试失败