选择具有指定作者的书籍

时间:2013-10-19 20:26:50

标签: sql

我有BookAuthor个表格。 Book有很多Author s(我知道它应该是多对多的,只是为了这个例子)。

如何在一个SQL查询中选择由作者编写的所有书籍:Y

修改

作者数量可以变化 - 3,5或更多作者。

我现在无法理解(我尝试过JOIN和子查询)。

SELECT * FROM book ...

4 个答案:

答案 0 :(得分:4)

试试这个:

SELECT
  B.Name
FROM Books B
  JOIN Authors A
    ON B.AuthorID = A.ID
WHERE A.Name IN ('X', 'Y')
GROUP BY B.Name
HAVING COUNT(DISTINCT A.ID) = 2

答案 1 :(得分:1)

您可以加倍加入作者表。

SELECT Book.* from Book 
    JOIN Author author1 
        ON author1.book_id = Book.id AND author1.author_name = 'Some Name'
    JOIN Author author2
        ON author2.book_id = Book.id AND author1.author_name = 'Some Other Name'
GROUP BY Book.id

JOIN确保只返回包含两位作者的书籍,而GROUP BY只使结果集只包含唯一的条目。

值得注意的是,此查询将带回至少指定两位作者的书籍。例如,如果您只想要史密斯和琼斯的书籍,而不是史密斯,琼斯和马丁的书籍,那么这个查询就不会这样做。此查询将撤回至少史密斯和琼斯的图书。

答案 2 :(得分:0)

从书中选择*作者= ....?

我发现很难理解你的结构,但这似乎是最好的方式?

希望这有帮助

答案 3 :(得分:0)

我假设您的作者表具有书籍ID(因为这会给许多作者一本书)。

SELECT * from Books Where ID IN
(SELECT BookID from Author A 
 JOIN Author B on A.BookID = B.BookID and A.ID <> B.ID 
 WHERE A.ID IN ('X', 'Y') AND B.ID IN ('X','Y'))
编辑:哈姆雷特的答案要好得多(可扩展)。