MySQL根据特定的字段值和行数选择多行

use*_*374 6 mysql sql select group-by having-clause

我有三张桌子:

author (columns: aut_id, aut_name)
book (columns: book_id, book_title)
authorbook (linking table, columns: aut_id, book_id)
Run Code Online (Sandbox Code Playgroud)

每个作者都可以与一本或多本书相关联.
每本书都可以与一位或多位作者联系.
我想根据名称和作者的确切数量来选择一本书.

表结构:

author    
aut_id    |   aut_name
1             Aname
2             Bname
3             Cname

book    
book_id    |  book_title (the titles are identical on purpose) 
1             Atitle
2             Atitle
3             Atitle

authorbook
aut_id    |   book_id 
1             1
1             2
2             2
1             3
2             3
3             3
Run Code Online (Sandbox Code Playgroud)

这是我的代码(我遗漏了作者表以便更好地澄清):

SELECT authorbook.book_id 
FROM authorbook 
INNER JOIN book
ON authorbook.book_id = book.book_id
WHERE book_title='Atitle'
AND FIND_IN_SET (authorbook.aut_id,'1,2')
GROUP BY authorbook.book_id
HAVING (COUNT(authorbook.aut_id)=2)
Run Code Online (Sandbox Code Playgroud)

问题:此代码不仅返回authorbook.book_id(2)TWO 所需的内容,authorbook.aut_ids (1,2)还返回authorbook.book_id(3)THREE authorbook.aut_ids (1,2,3).

问题:如何将SELECT一本书与该FIND_IN_SET条款中的作者完全相关(并且没有其他作者)?非常感谢你的帮助!

Mah*_*mal 2

尝试这个:

SELECT a.book_id
FROM authorbook a
INNER JOIN book b
ON a.book_id = b.book_id
WHERE b.book_title='Atitle'
  AND FIND_IN_SET (a.aut_id,'1,2')
GROUP BY a.book_id
HAVING COUNT(DISTINCT a.aut_id) = 2
   AND COUNT(DISTINCT a.aut_id) = (SELECT COUNT(DISTINCT a2.aut_id)
                                   FROM authorbook a2 
                                   WHERE a2.book_id = a.book_id);
Run Code Online (Sandbox Code Playgroud)

SQL 小提琴演示