SQL,仅返回在一列中至少再找到一个具有相同值的条目的行

时间:2014-02-01 06:39:38

标签: sql oracle

很抱歉,如果我的措辞非常糟糕。我还没有很好地记住这些条款。

我有以下内容(我无法对其进行任何更改):

  

书籍(BookID,标题)

     

作者(BookID,WritID)

     

Writer(WritID,FirstName,LastName)

我希望能够按标题列出拥有多位作者的书籍,因为作者列出了这样的内容:

  

Book01,Dude01

     

Book02,Dude01

     

Book02,Dude02

我一直在尝试使用COUNTHAVING来获取重复项,JOIN来连接图书和作者,但我感觉以下是完全关闭。 :(

select Title, BookID, count(*)
from Author
join Books
on Author.BookID=Books.BookID
having count(*) >= 2;

非常感谢任何正确方向的帮助或观点。

2 个答案:

答案 0 :(得分:3)

对于聚合函数,请使用Group By子句。

SQL GROUP BY子句可用于SQL SELECT查询,以跨多个记录收集数据,并按一列或多列对结果进行分组。

答案 1 :(得分:2)

您缺少GROUP BY - 您需要按照您希望在未汇总的结果中看到的所有列进行分组:

select Books.Title, Books.BookID, count(*)
from Author
join Books
on Author.BookID=Books.BookID
group by Books.Title, Books.BookID
having count(*) >= 2;

SQL Fiddle demo