У меня есть база данных с тремя таблицами: Книги (с деталями книги, PK - это CopyID), Ключевые слова (список ключевых слов, PK - это идентификатор) и KeywordsLink, которая представляет собой таблицу ссылок «многие-многие» между книгами и ключевыми словами с ID полей, BookID и KeywordID.
Я пытаюсь создать в своем приложении форму расширенного поиска, в которой вы можете выполнять поиск по различным критериям. На данный момент у меня это работает с названием, автором и издателем (все из таблицы книги). Он производит SQL как:
SELECT * FROM Books WHERE Title Like '%Software%' OR Author LIKE '%Spolsky%';
Я хочу расширить этот поиск, чтобы также выполнять поиск по тегам - в основном, чтобы добавить еще одно предложение ИЛИ для поиска по тегам. Я попытался сделать это, выполнив следующее
SELECT *
FROM Books, Keywords, Keywordslink
WHERE Title LIKE '%Joel%'
OR (Name LIKE '%good%' AND BookID=Books.CopyID AND KeywordID=Keywords.ID)
Я думал, что использование скобок может разделить 2-ю часть на свое собственное своеобразное предложение, поэтому объединение оценивалось только в этой части - но, похоже, это не так. Все, что он дает мне, это длинный список нескольких экземпляров одной книги, которая удовлетворяет биту Title LIKE '%Joel%'
.
Есть ли способ сделать это, используя чистый SQL, или мне придется использовать два оператора SQL и объединить их в моем приложении (удаляя дубликаты в процессе).
В данный момент я использую MySQL, если это имеет значение, но приложение использует ODBC, и я надеюсь сделать его независимым от БД (возможно, в конечном итоге даже использовать SQLite или использовать его, чтобы пользователь мог выбрать, какую БД использовать).