繁体   English   中英

选择有指定作者的书籍

[英]Select books having specified authors

我有BookAuthor表。 Book有很多Author (我知道应该是多对多的,仅出于本示例的目的)。

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

编辑

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

我现在无法弄清楚(我尝试过执行JOIN和子查询)。

SELECT * FROM book ...

尝试这个:

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

您可以只双重加入authors表。

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的书籍。

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

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

希望这可以帮助

我假设您的“作者”表具有一本书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'))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM