我有一个存储有关电子书信息的数据库,它由5个表,即MS访问SQL - 从5桌
- 图书(book_id,BOOK_NAME,book_rating)
- 作者(AUTHOR_ID搜索,AUTHOR_NAME)
- BOOK_AND_AUTHORS(BA_ID,book_id,AUTHOR_ID)
- 标签(TAG_ID,TAG_NAME)
- BOOKS_AND_TAGS(bt_id,book_id,TAG_ID)
每本书都有一个或多个作者和一个或多个标签(来对它们进行分类)。 BOOKS_AND_AUTHORS
和BOOKS_AND_TAGS
是用于保持book:authors和books:tags之间的多对多关系的联结表。
现在我想要做的就是使用多个条件来搜索特定的图书。
例如,我想要得到的姓名和身份证符合以下标准书的,
- 有等级大于或等于2
- 应该只由标签ID的表示的标签2和219;没有其他标签允许。
我的解决方案包含以下内容。
SELECT DISTINCT books.book_id, books.book_name
FROM
(
(tags INNER JOIN books_and_tags ON tags.tag_id = books_and_tags.tag_id)
INNER JOIN
(books INNER JOIN
(authors INNER JOIN books_and_authors
ON authors.author_id = books_and_authors.author_id)
ON books.book_id = books_and_authors.book_id)
ON books_and_tags.book_id = books.book_id
)
WHERE ((BOOKS.book_rating >= 2) AND ((TAGS.tag_id) IN (2,219)))
GROUP BY BOOKS.book_id, BOOKS.book_name
HAVING COUNT(TAGS.tag_id) = 2
不幸的是,这并没有返回我想要的。我做错了吗?任何建议如何使用SQL实现这种类型的搜索?谢谢。
您可能会简化为仅加入您正在谈论的2个表格而不是全部5 – Randy 2015-04-03 12:05:21
@Randy感谢您的评论。不能这样做,因为这样会使代码复杂化(VBA)。我希望上面的SQL根据任何标准执行搜索。例如,如果我想使用作者姓名+ 5标签+部分书名来搜索图书。 – chemkatku 2015-04-04 15:32:06