PostgreSQL:如果b列中的任何列具有特定值,则过滤查询以从a列中全部隐藏

时间:2018-06-19 16:16:29

标签: postgresql sqlalchemy postgresql-9.3

我是Postgresql / sqlalchemy的新手,并且有一个查询问题。我有以下联接表

select classroom.name, student.class_name, student.full_name
from classroom
inner join student on classroom.name = student.class_name

哪个返回以下内容:

classroom.name | student.class_name | student.full_name
-------------------------------------------------------
Math           |        Math        |        Joe
Math           |        Math        |        Kim
Math           |        Math        |       Chris
English        |       English      |        Joe
English        |       English      |        Kim

我想做的是过滤此查询,以便如果某个学生(仅允许克里斯)存在于student.name列中,它将不返回教室名称为Math的任何行,因为其中一项具有克里斯。所以我正在寻找的输出是

classroom.name | student.class_name | student.full_name
-------------------------------------------------------
English        |       English      |        Joe
English        |       English      |        Kim

我尝试添加一个Where student.full_name = 'Chris',但这只隐藏了一个条目,而仍然保留了另外两个条目。

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

添加一个WHERE子句,该子句排除不需要的行:

...
WHERE NOT EXISTS (
   SELECT 1
   FROM classroom c
      JOIN student s ON c.name = s.class_name
   WHERE c.name = classroom.name
     AND s.full_name = 'Chris'
)

此答案是根据知识共享2.0许可提供的。
您必须在功课上给我功劳。