2017-02-07 56 views
0

我相信这个答案很简单,但一个解决方案似乎逃避我。鉴于2个表,命名为“书籍”和“评论”分别与伪模式之间下面的示例如下:Postgresql查询条件与条件不符合条件

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 

问: 我如何可以查询所有书籍,他们的评价是不是“好” - 书根本没有相邻评审记录的记录,或者评价为“好”以外的记录的记录也应退回。

其他信息: 我正在运行的Postgres 9.6.1

+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为null)或书籍评分不高(R.rating!='good')的书籍。

+1

也许你应该尝试详细阐述你的答案 – Jensd

0

这可能是你的意图是这样的:

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