如何在MySQL联结表中查询同时拥有指定标签的书籍ID
问题:找出同时拥有多个指定标签的书籍
背景信息
我有一张联结表book_tags,建表语句如下:
CREATE TABLE `book_tags` ( `id` int(11) NOT NULL, `book_id` int(11) DEFAULT NULL, `tag_id` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
表中数据示例:
INSERT INTO `book_tags` (`id`, `book_id`, `tag_id`) VALUES (3, 20, 1), (4, 20, 2), (5, 21, 1), (6, 22, 2), (7, 24, 2);
我想知道如何找出同时拥有两个或多个指定标签的书籍(book_id)?比如,如何查询同时拥有tag_id=1和tag_id=2的书籍?
解决方案
我在Stack Exchange上找到了对应的解决办法,针对需要匹配2个标签的场景,可以使用以下SQL语句:
SELECT book_id FROM `book_tags` WHERE `tag_id` IN (1, 2) GROUP BY book_id HAVING COUNT(*) = 2
适用说明
因为我确认表中不存在book_id与tag_id重复的行(即同一本书不会被标记同一个标签多次),所以这个方案完全适用。
感谢@Barbaros Özhan和@scaisEdge的帮助!
内容的提问来源于stack exchange,提问作者oshka
相关产品推荐
相关产品推荐

