2

ms sql 2012 サーバーでは、いくつかの列に全文検索インデックスがあります。
FREETEXTTABLE または CONTAINSTABLE を使用してクエリを実行しましたが、検索テキストが他の列とは異なる複数の列に表示された場合、私の反応は異なるはずです。
結果が表示された列名を区別または受け取る方法はありますか?
ありがとう。

4

1 に答える 1

1

*すべての列を検索するオプションを指定して FREETEXTTABLE/CONTAINSTABLE を呼び出していると思います。代わりに、列ごとに 1 つずつ、複数の呼び出しを行ってみてください。これは、状況に応じて 1 つのクエリで行うことも、個別のクエリとして行うこともできます。

例 (1 クエリ方式):

SELECT
   Case
      When (MatchesColumn1or2.[KEY] is not null) Then 'Matches Column 1 or 2'
      When (MatchesColumn3.[KEY] is not null) Then 'Matches Column 3'
   End
FROM
   FREETEXTTABLE(MyTable, (Column1, Column2), 'cat AND dog') as MatchesColumn1or2
full outer join
   FREETEXTTABLE(MyTable, Column3, 'cat AND dog') as MatchesColumn3
   on (MatchesColumn1or2.[KEY] = MatchesColumn3.[KEY])

元のランク値を維持したい場合の例を次に示しますが、追加されたパフォーマンス ヒットに注意してください。

SELECT
   MatchAllColumns.[RANK],
   Case
      When (MatchesColumn1or2.[KEY] is not null) Then 'Matches Column 1 or 2'
      When (MatchesColumn3.[KEY] is not null) Then 'Matches Column 3'
   End
FROM
   FREETEXTTABLE(MyTable, *, 'cat AND dog') as MatchAllColumns
left join
   FREETEXTTABLE(MyTable, (Column1, Column2), 'cat AND dog') as MatchesColumn1or2
   on (MatchAllColumns.[KEY] = MatchesColumn1or2.[KEY])
left join
   FREETEXTTABLE(MyTable, Column3, 'cat AND dog') as MatchesColumn3
   on (MatchAllColumns.[KEY] = MatchesColumn3.[KEY])
于 2013-06-10T14:26:41.920 に答える