2011-11-18 125 views
0

SQL查询来获取谁已至少写在所有类型的一本书作者的名单SQL查询查询

表是

 Author_id | Author_info => authors 
     Genre_id | Genre_info => genres 
     Author_id | Genre_id | Book_id => books 

我使用MySQL,这将是做的最好办法这个?

+0

那你试试,结果什么也没给你? –

+0

你已经尝试过一些东西了吗?作为一个技巧,首先找到那些他们没有写过性别的作者。那些是你不想要的作者。 – njr101

+0

我的想法是从'流派'中统计流派的数量,然后将它们与(author_id,genre_id)的不同映射进行匹配,但由于我已经离开了SQL一段时间,我无法将它放在一起SQL – theReverseFlick

回答

2

如果N是不同类型的数目:

select author_id, count(distinct genre_id) as genres 
from books 
group by author_id 
having genres = N 
1

假定数据库模式,因为这

authors 
|- Author_id -|- Author_info -| 
genres 
|- Genre_id -|- Genre_info -| 
books 
|- Author_id -|- Genre_id -|- Book_id -| 

查询

SELECT authors.Author_id 
FROM authors 
LEFT INNER JOIN books ON (authors.Author_id = books.Author_id) 
GROUP BY authors.Author_id 
HAVING COUNT(DISTINCT books.Genre_id) = (SELECT COUNT(*) FROM genres) 
+0

你确定这会工作吗?查看SQL我认为它会聚合所有*作者的所有*书籍的数量,因为没有作者的分组。 – njr101

+0

感谢您的警告,更新后的查询 –

0

尝试这种情况:

 
SELECT Author_id 
FROM books 
INNER JOIN Genre USING (Genre) 
GROUP BY Author_id 
HAVING COUNT(Author_id) >= (SELECT COUNT(*) FROM Genre); 
+0

有效,但可以在没有连接的情况下完成 – theReverseFlick

0

获得书面至少一本书上的所有流派

尝试...

select author_id, count(distinct genre_id) as genres 
from books 
group by author_id 
having genres >= 1