我有一個存儲有關電子書信息的數據庫,它由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