[英]How to select all the authors from database with the number of books assigned to them?
[英]Select books having specified authors
我有Book
和Author
表。 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.