0

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

如何在一个 sql 查询中选择作者撰写的所有书籍:X和Y?

编辑

作者的数量可以是可变的 - 3、5 或更多作者。

我现在想不通(我试过做JOINs 和子查询)。

SELECT * FROM book ...?

4

4 回答 4

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
于 2013-10-19T20:32:00.023 回答
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 只是使结果集只包含唯一条目。

值得注意的是,此查询将带回至少指定了两位作者的书籍。例如,如果您只需要 Smith 和 Jones 的书籍,而不是 Smith、Jones 和 Martin 的书籍,则此查询不会执行此操作。此查询将拉回至少包含Smith 和 Jones 的书籍。

于 2013-10-19T20:32:13.617 回答
0

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

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

希望这可以帮助

于 2013-10-19T20:28:56.380 回答
0

我假设您的 Author 表有一个 Book 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'))

编辑:哈姆雷特的答案要好得多(可扩展)。

于 2013-10-19T20:35:12.110 回答