У меня есть база данных, которая хранит информацию о электронных книгах и состоит из 5 таблиц, а именно,MS Access SQL - Поиск из 5 таблиц
- КНИГИ (book_id, book_name, book_rating)
- АВТОРОВ (AUTHOR_ID , author_name)
- BOOK_AND_AUTHORS (BA_ID, book_id, author_id)
- МЕТКИ (tag_id, имя_тега)
- BOOKS_AND_TAGS (bt_id, book_id, tag_id)
В каждой книге есть один или несколько авторов и один или несколько тегов (чтобы их классифицировать). BOOKS_AND_AUTHORS
и BOOKS_AND_TAGS
- это таблицы соединений, используемые для поддержания отношений «многие ко многим» между книгами: авторами и книгами: тегами.
Теперь я хочу найти конкретную книгу с sql, используя несколько критериев.
Например, я хочу, чтобы получить имена и корочку книги, которые соответствуют следующим критериям,
- Имеет рейтинг 2 или выше
- должны иметь только тег, обозначаемые тег идентификаторов 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
@Randy Спасибо за комментарий. Не могу этого сделать, потому что это усложнит код (VBA). Я хочу, чтобы вышеуказанный SQL выполнял поиск по любым критериям. Например, если я хочу искать книгу, используя имя автора + 5 тегов + имя частичной книги. – chemkatku