Postgresql查询条件与连接不满足条件

时间:2017-02-07 03:21:15

标签: sql postgresql

我确信这个问题的答案很简单,但解决方案似乎无法解决。给出了两个表之间的以下示例,名为" books"和"评论"分别用伪模式如下:

books:
id 
title
author 

reviews: (adjacent review records may or may not exist)
id
book_id
rating - rating can either be "good" or "bad", stored as a varchar

问题: 我如何查询所有书籍,他们的评级不是"好" - 根本没有相邻评论记录的图书记录,或者评价为" good"以外的任何评论记录的图书记录也应该被退回。

其他信息: 我正在运行postgres 9.6.1

2 个答案:

答案 0 :(得分:0)

select
   B.*
from books B
left join reviews R on (B.id = R.book_id)
where R.rating is null
or R.rating != 'good' 

左连接将返回满足where子句的所有书籍,无论是否有匹配的审阅。 on子句(B.id = R.book_id)描述了在评论存在时书籍如何链接到评论。

在where子句中,我想保留没有评论的书籍(R.rating为空)或评级不佳的书籍(R.rating!=' good')。

答案 1 :(得分:0)

您的意图可能是:

select b.*
from books b
where not exists (select 1
                  from reviews r
                  where r.book_id = b.id and r.rating = 'good'
                 );
相关问题