2009-10-15 57 views
8

我有3个表,全文搜索使用多个表中的SQL

  1. tblBook(BookID, ISBN, Title, Summary)
  2. tblAuthor(AuthorID, FullName)
  3. 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

你能帮我吗?

回答

3

您可以在tblAuthor上运行另一个SELECT/CONTAINSTABLE查询,将结果联合在一起,并与另一个查询结合在一起,从而删除任何重复项,并且推送结果与tblBook和tblAuthor都匹配得更高。

我认为这将实现你正在尝试的待办事项。