SELECT b.FK_Publication_ID, b.PageNumber as PageNumber, b.SearchText as SearchText, a.Title as Title ,
TitleSearch.[Rank] + PubSearch.[Rank] * 10000
AS [Rank]
FROM PublicationSearch
INNER JOIN Publication a ON b.FK_Publication_Id = a.Id
INNER JOIN FREETEXTTABLE(PublicationSearch, SearchText, "searchtext") PubSearch ON b.Id = PubSearch.[Key]
INNER JOIN FREETEXTTABLE(Publication, Title, "searchtext") TitleSearch ON a.Id = TitleSearch.[Key]
WHERE b.FK_ContentType_Id IN (SELECT * FROM UF_CSVToTable(@Options))
UNION
SELECT a.Id, null as PageNumber, null as Searchtext, a.Title as Title, TitleSearch.[Rank] * 100 AS [Rank]
FROM Publication a
INNER JOIN FREETEXTTABLE(Publication,Title, "searchtext") TitleSearch ON a.Id = TitleSearch.[Key]
UNION
SELECT b.FK_Publication_ID, b.PageNumber as PageNumber, b.SearchText as SearchText, null as Title,
PubSearch.[Rank]
AS [Rank]
FROM PublicationSearch b
INNER JOIN FREETEXTTABLE(PublicationSearch, SearchText, "searchtext") PubSearch ON b.Id = PubSearch.[Key]
ORDER BY [Rank] DESC
上記はUNIONを使用しています
以下、ご指摘の通りです
SELECT b.FK_Publication_ID、b.PageNumber を PageNumber、b.SearchText を SearchText、a.Title を Title として ContentType 、
TitleSearch.[Rank] * 100 (Ranking, dont know how to do it here)
AS [Rank]
FROM PublicationSearch b
INNER JOIN Publication a ON b.FK_Publication_Id = a.Id
JOIN FREETEXTTABLE(PublicationSearch, SearchText, "searchtext")PubSearch ON b.Id = PubSearch.[Key]
FULL JOIN FREETEXTTABLE(Publication, Title, "searchtext")TitleSearch ON a.Id = TitleSearch.[Key]
order by [RANK] desc
これが正確なスクリプトです。完全結合を使用して、両方のテーブルからレコードを取得し、PublicationSearch テーブルのみからレコードを取得しますが、Publication テーブルからのみ取得するわけではありません
また、両方のテーブルで見つかったレコードを上位にランク付けしてから、Publication テーブルのみのレコードと PublicationSerach テーブルのレコードをランク付けする必要があります。
ありがとう..