SQL查询来获取谁已至少写在所有类型的一本书作者的名单SQL查询查询
表是
Author_id | Author_info => authors
Genre_id | Genre_info => genres
Author_id | Genre_id | Book_id => books
我使用MySQL,这将是做的最好办法这个?
SQL查询来获取谁已至少写在所有类型的一本书作者的名单SQL查询查询
表是
Author_id | Author_info => authors
Genre_id | Genre_info => genres
Author_id | Genre_id | Book_id => books
我使用MySQL,这将是做的最好办法这个?
如果N是不同类型的数目:
select author_id, count(distinct genre_id) as genres
from books
group by author_id
having genres = N
假定数据库模式,因为这
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)
你确定这会工作吗?查看SQL我认为它会聚合所有*作者的所有*书籍的数量,因为没有作者的分组。 – njr101
感谢您的警告,更新后的查询 –
尝试这种情况:
SELECT Author_id FROM books INNER JOIN Genre USING (Genre) GROUP BY Author_id HAVING COUNT(Author_id) >= (SELECT COUNT(*) FROM Genre);
有效,但可以在没有连接的情况下完成 – theReverseFlick
获得书面至少一本书上的所有流派
尝试...
select author_id, count(distinct genre_id) as genres
from books
group by author_id
having genres >= 1
那你试试,结果什么也没给你? –
你已经尝试过一些东西了吗?作为一个技巧,首先找到那些他们没有写过性别的作者。那些是你不想要的作者。 – njr101
我的想法是从'流派'中统计流派的数量,然后将它们与(author_id,genre_id)的不同映射进行匹配,但由于我已经离开了SQL一段时间,我无法将它放在一起SQL – theReverseFlick