2016-11-03 10 views
0

質問は 'すべてのフィールドで書籍を公開している出版社を検索する'です。入れ子になったクエリと二重否定

book(ISBN(PK), Publisher(FK)) 
field(Book(FK), field) 
Publisher(name(PK)) 

私がやって正確に何を見つけることができたhaventは、さまざまな方法を試したが助け無しにされています。私はそれについて尋ねましたが、答えは最高でした。私は与えられた答えは、ロジックはパブリッシャhasntが、私はこれがうまくいくと信じて

+1

このスキーマはうんざりです...なぜ 'Field'テーブルが' Book'との間に 'FOREIGN KEY'関係を持っていますか?これは意味をなさない。あなたが提供した構造では、*すべてのフィールド*が実際に何を意味するのかをどうやって決めますか?あなたが言及した論理は正しいです、作者が本を出版していないフィールドが存在しないかどうかを調べる必要があります。*(ヒント: '存在しない場所があるか' OUTER JOIN')* – Siyual

答えて

1
with cnt as (select count(distinct field) c from field) 
select b.Publisher 
    from book b 
    inner join field f on (b.ISBN=f.Book) 
    inner join cnt on (1=1) 
group by b.Publisher, cnt.c 
having count(distinct field) = cnt.c; 

about'-本を出版することをフィールドがイマイチどこ出版社を見つける」ことですwas-。

+0

'HAVING'句の数は' publisher'ではなく 'field'でなければなりません。 – mathguy

+0

@mathguyはい、私はそれを修正しました。 – Kacper

関連する問題