我有三个包含书籍和标签的表格。一本书可以用多个标签进行标记。
我想要做的是过滤掉带有“漫画”和“浪漫”标签的书籍。
- 第一本书只标有“漫画”。
- 第二本书同时标记了“漫画”和“浪漫”,因此在我们的示例中应该返回这一行。
- 第三本书只标有“幻想”。
如何构建适当的查询来查找第二本书?
..select book_id from books b, tags t, tags_to_books tb where ((FIND TAGS_ID '7' AND '8'))..
表设计:
DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
`book_id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`book_id`)
);
INSERT INTO `books` (`book_id`)
VALUES
(1),
(2),
(3);
DROP TABLE IF EXISTS `tags`;
CREATE TABLE `tags` (
`tag_id` int(11) NOT NULL AUTO_INCREMENT,
`tag_name` varchar(11) NOT NULL DEFAULT '',
PRIMARY KEY (`tag_id`)
);
INSERT INTO `tags` (`tag_id`, `tag_name`)
VALUES
(7,'Comics'),
(8,'Romance'),
(9,'Fantasy');
DROP TABLE IF EXISTS `tags_to_books`;
CREATE TABLE `tags_to_books` (
`book_id` int(11) NOT NULL,
`tag_id` int(11) NOT NULL
);
INSERT INTO `tags_to_books` (`book_id`, `tag_id`)
VALUES
(1,7),
(2,7),
(2,8),
(3,9);