我有Book
和Author
个表格。 Book
有很多Author
s(我知道它应该是多对多的,只是为了这个例子)。
如何在一个SQL查询中选择由作者编写的所有书籍:Y 和?
修改
作者数量可以变化 - 3,5或更多作者。
我现在无法理解(我尝试过JOIN
和子查询)。
SELECT * FROM book ...
?
答案 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'))
编辑:哈姆雷特的答案要好得多(可扩展)。