我确信这个问题的答案很简单,但解决方案似乎无法解决。给出了两个表之间的以下示例,名为" 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
答案 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'
);