2017-02-07 11 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' 
       ); 
関連する問題