我有3张桌子,
tblBook(BookID, ISBN, Title, Summary)
tblAuthor(AuthorID, FullName)
tblBookAuthor(BookAuthorID, BookID, AuthorID)
tblBookAuthor
允许一本书有多位作者,作者可能已经写过任意数量的书籍。
我使用全文搜索来搜索基于单词的排名:
SET @Word = 'FORMSOF(INFLECTIONAL, "' + @Word + '")'
SELECT
COALESCE(ISBNResults.[KEY], TitleResults.[KEY], SummaryResults.[KEY]) AS [KEY],
ISNULL(ISBNResults.Rank, 0) * 3 +
ISNULL(TitleResults.Rank, 0) * 2 +
ISNULL(SummaryResults.Rank, 0) AS Rank
FROM
CONTAINSTABLE(tblBook, ISBN, @Word, LANGUAGE 'English') AS ISBNResults
FULL OUTER JOIN
CONTAINSTABLE(tblBook, Title, @Word, LANGUAGE 'English') AS TitleResults
ON ISBNResults.[KEY] = TitleResults.[KEY]
FULL OUTER JOIN
CONTAINSTABLE(tblBook, Summary, @Word, LANGUAGE 'English') AS SummaryResults
ON ISBNResults.[KEY] = SummaryResults.[KEY]
上述代码可以正常搜索tblBook
表。但现在我想根据搜索的关键词搜索表tblAuthor
。
你能帮我解决这个问题吗?
答案 0 :(得分:3)
你可以在tblAuthor上运行另一个SELECT / CONTAINSTABLE查询,将结果合并在一起,并用另一个查询进行换行,该查询对Rank列上的Rank进行求和以删除任何重复项,并将tblBook和tblAuthor匹配的结果推高。
我认为这将实现您正在尝试的东西。
答案 1 :(得分:3)
您可以创建一个组合表的视图,然后在其上创建一个全文索引。请参阅此博文:http://versia.com/2008/02/06/sql-server-full-text-searching-across-multiple-tables/