[英]MySQL SELECT multiple rows based on specific field value and number of rows
我有三张桌子:
author (columns: aut_id, aut_name)
book (columns: book_id, book_title)
authorbook (linking table, columns: aut_id, book_id)
每个作者都可以与一本或多本书相关联。
每本书都可以与一位或多位作者联系。
我想根据名称和作者的确切数量来选择一本书。
表结构:
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
这是我的代码(我遗漏了作者表以便更好地澄清):
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)
问题:此代码不仅返回带有TWO authorbook.aut_ids (1,2)
的所需authorbook.book_id(2)
,还authorbook.book_id(3)
带有THREE authorbook.aut_ids (1,2,3)
的authorbook.book_id(3)
authorbook.aut_ids (1,2,3)
。
问题:如何在FIND_IN_SET
子句中SELECT
与作者完全关联的书籍(并且没有其他作者)? 非常感谢你的帮助!
试试这个:
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);
这应该工作
SELECT COUNT(aut_id) AS authors, book_id FROM (SELECT authorbook.*
FROM authorbook
INNER JOIN book
ON authorbook.book_id = book.book_id
WHERE book_title='Atitle') AS t1 GROUP BY book_id HAVING authors='2'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.