MySQL查询库数据库

时间:2014-03-10 18:53:54

标签: mysql

我有一个数据库项目,我正在努力解决三个问题。你能帮忙吗?

我有以下表格:

member(memberNo, name, age)
book(isbn, title, author, publisher, year, category)
borrowed(memberNo, isbn, date)

我必须通过制定单个SQL查询(即不使用视图)来回答以下每个问题:

1)对于每个类别,找到在该类别中借阅超过五本书的成员的姓名。

2)找到图书馆中最多产的作家,即撰写了最多书籍的作者。

3)找到多次借用同一本书的会员的姓名。

非常感谢

到目前为止,我尝试了以下内容:

1)我的查询:

SELECT member.name 
  FROM member 
 WHERE member.memberNo IN(SELECT borrowed.memberNo 
                            FROM borrowed 
                           GROUP 
                              BY memberNo 
                          HAVING COUNT(memberNo)>5)

结果: 这似乎返回了正确的结果,但我还没有想出如何根据问题添加“类别”。

2)我的查询:

SELECT author 
     , COUNT(*) AS 'Books Written' 
  FROM book 
 GROUP 
    BY author 
HAVING COUNT(isbn)>6

结果: 这会返回正确的结果,但仅仅因为我指定了6个以上 - 这是因为我知道我有一个写过7本书的作者,因此我指的是'超过6' - 但我不知道如何写一个查询,确定自己编写的“大多数书籍”

3)我的查询:

SELECT member.name 
  FROM member 
 WHERE member.memberNo IN (SELECT borrowed.memberNo 
                             FROM borrowed 
                            WHERE borrowed.isbn IN(
                                   SELECT COUNT(borrowed.isbn) as 'con' 
                                     FROM borrowed 
                                    WHERE 'con' >1))

结果: 查询返回一些带有成员名称的行,但它们不正确 - 一些成员只是借了多本书(但不是同一本书不止一次),但其他成员没有多次借过任何书籍 - 所以查询不正确。

1 个答案:

答案 0 :(得分:0)

这是1 ....的线索。

SELECT b.something
     , c.something_else
  FROM a
  JOIN b
    ON b.x = a.x
  JOIN c
    ON c.y = a.y
 GROUP 
    BY b.m
     , c.n
HAVING COUNT(*) >= 5;