У меня есть база данных с тремя таблицами: книги (с информацией о книге, PK - это CopyID), ключевые слова (список ключевых слов, PK - это идентификатор) и KeywordsLink, которая является таблицей ссылок многих многих между книгами и ключевыми словами с идентификаторами полей, BookID и KeywordID.SELECT с ORs, включая объединения таблиц
Я пытаюсь создать расширенную форму поиска в своем приложении, где вы можете искать по различным критериям. На данный момент у меня есть работа с Title, Author и Publisher (все из таблицы Book). Он производит 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, и я надеюсь сделать его агностиком DB (возможно, даже в конечном итоге использовать SQLite или иметь его, чтобы пользователь мог выбрать, какую БД использовать) ,
Я не уверен, что под-суб-выбор здесь является наиболее эффективным способом приблизиться к этому. Я определенно проведу сравнение на этом, чтобы увидеть, будет ли он медленным. – 2008-11-21 19:49:29
Это позволяет избежать использования ключевых слов и ключевых слов для тех, которые вы не указали по ключевому слову. Я думаю, что это будет победа. – 2008-11-21 19:51:13