2011-11-18 124 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