1

在编写涉及聚合函数的查询(例如 Count 以及使用 Have 时)时,我遇到了麻烦。我有两张 People(id 和 name)和 Books(bookid、author_id、title)表(这里 author_id 是 People id 的外键)。我目前有一个查询返回给我所有写过书的人(不是所有的人都写过书)。

SELECT People.name, 
       Books.title 
FROM People, 
     Books 
WHERE Books.author_id = People.id;

现在我试图只找到写过 2 本书以上的人并让它选择相同的信息(people.name 和 books.title),但我对如何处理这件事感到困惑。我一直在尝试使用 HAVING count(People.name) > 1 但我得到的选择绝对不正确。

对使用 sql 有点陌生,尤其是在将这些额外参数放在我的查询中时,我只是想知道是否有人可以帮助我。我还没有真正看到任何具有这些条件的查询示例。

4

2 回答 2

3

最好以这种方式加入您的表:

SELECT People.name, Books.title
FROM People INNER JOIN Books ON Books.author_id = People.id;

你可以像这样添加你的 HAVING 子句:

SELECT Books.author_id
FROM Books
GROUP BY Books.author_id
HAVING COUNT(*)>=2

然后选择您需要的所有信息,您可以使用它:

SELECT People.name, Books.title
FROM People INNER JOIN Books ON Books.author_id = People.id
WHERE People.ID IN (
  SELECT Books.author_id
  FROM Books
  GROUP BY Books.author_id
  HAVING COUNT(*)>=2
)
于 2013-06-30T14:09:47.733 回答
2
SELECT People.name, 
       Books.title 
FROM People, 
     Books 
WHERE Books.author_id = People.id 
  and exists (select 1 
              from (
                 SELECT People.name name 
                 FROM People, 
                      Books 
                 WHERE Books.author_id = People.id 
                 group by Pepole.name 
                 having count(People.name)>1
              ) temp 
              where temp.name = People.name)
于 2013-06-30T14:10:45.937 回答