我的数据库中有三个表
作者:援助| fname | L-NAME
书:isbn |标题| btype |价格| pub_date | PID
Written_by:isbn(参考book.isbn)|援助(参考author.aid)
我试图回复所有写过两本以上btype“小说”的作者的名字和姓氏。我确实找到了this问题,这个问题将选择一般写过两本以上书籍的作者,但我无法弄清楚如何修改它以专注于小说。有什么建议吗?
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
);
编辑:想出来。在where btype = "novel"
之前添加了group by
,现在可以正常运行了。
答案 0 :(得分:1)
想出来。在where btype = "novel"
之前添加了group by
,现在可以正常运行了。
答案 1 :(得分:0)
有几种方法可以形成此查询。你曾经使用IN()
这是一个你应该知道的替代方案。
使用内部联接
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
注意使用单引号作为文字,例如'novel'
双引号用于标识,例如包含空格的列别名。