2017-11-12 3 views
0

私のデータベースには3つのテーブルがあります2つ以上の小説を書いた著者のID、名字、姓

著者:aid | fname | lname

本:isbn |タイトル| btype |価格| pub_date | pid

Written_by:isbn(references book.isbn)|

私はbtype "novel"を2冊以上書いたすべての著者の名字を返そうとしています。私はthisという質問を見つけましたが、それは一般的に2冊以上の本を書いた著者を選びますが、小説に焦点を当てるように修正する方法はわかりません。助言がありますか?

select aid, fname, lname 
from author 
where aid in (
    select aid 
    from written_by 
     join book on book.isbn = written_by.isbn 
    group by aid 
    having count(*) > 2 
); 

編集:それを考え出しました。 group byの前にwhere btype = "novel"が追加され、意図したとおりに動作するようになりました。

+0

サブクエリは 'where句 'も使用できます。その質問が小説に焦点を当てるなら、あなたは答えがありますか? –

+0

私はあなたが過去に答えを持っているのを見ます。答えを "受け入れる"ことを知っていますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、「[** Click The Tick **](https://ibb.co/ikqyO6)」を参照してください。 –

+0

私はちょうど私が 'group by'を' where btype = "novel"に変更して、それが完全に働いたと言って私の答えを編集しようとしていました。ありがとう! – Richard

答えて

0

このクエリを構成する方法はいくつかあります。ここではIN()を使用しています。インナーを使用

は、'novel'二重引用符としてリテラルの単一引用符は、スペースを含む列の別名として識別するために使用される

select aid, fname as "First Name", lname as "Last Name" 
from author a 
inner join (
    select aid 
    from written_by 
     join book on book.isbn = written_by.isbn 
    where btype = 'novel' 
    group by aid 
    having count(*) > 2 
    ) g on a.aid = g.aid 

注使用に参加します。

1

説明しました。 group byの前にwhere btype = "novel"が追加され、意図したとおりに動作するようになりました。

+0

あなた自身の答えを追加しようとしているなら、受け入れとアップ投票について学んでください.... "ダックをクリックしてください。"あなたは受け入れのために2PPを取得します...もちろん、自分の答えではありません。 –

関連する問題