2012-03-19 4 views
1

私は 'AssetDescription'という列を持つ 'Asset'テーブルを持っています。それのすべての行には、カンマで区切られた単語/文のグループがあります。SQL 2000に含まれています

行1: - 花、フルカラー、女性、トレンド
ROW2: - 赤ちゃん臭い花、心

置く場合のような検索クエリ: -

select * from Asset where contains(AssetDescription,'flower') 

それは何も返さない。

「SearchCol」という列を持つ「SearchData」という表がもう1つあります。表「資産」で前述したのと同様の行です。次のような検索クエリを入力した場合: -

select * from SearchData where contains(SearchCol,'flower') 

両方の行を返します。

QUESTION: - 最初のクエリが任意の結果を返しませんが、2番目の1が正しくない理由

  1. 「フルテキスト検索」には、1番目の質問と関係があります。 SQL Server 2000を使用しているため、

+0

どうしますか? 2番目のクエリはうまくいかなかったのですか? –

+0

rdbmsとは何ですか?お願いします。 – Benoit

+0

@Benoit - そのSQL Server 2000 – Kings

答えて

5

CONTAINSを使用するにはフルテキスト検索インデックスが必要です。また、フルテキスト検索インデックスを有効にする必要があります。 LIKEでは全文検索が必要ありません。

LIKEよりCONTAINSを使用する利点は、CONTAINSがより柔軟で、潜在的にはより高速であることです。 LIKEは、使用方法に応じて全表スキャンを必要とする場合があります。フルテキスト検索とは対照的にSQL Server docs

から

、LIKEのTransact-SQL述語は文字パターンに に動作します。また、LIKE述部を クエリ形式のバイナリデータに使用することはできません。さらに、大量の の非構造化テキストデータに対するLIKEクエリは、同じデータに対する同等のクエリ よりもはるかに低速です。テキストデータの行の何百万もの に対するLIKE照会は、戻すには数分かかることがあります。 クエリは、返される行数に応じて に応じて、同じデータに対してわずか数秒で完了します。

+0

有益な情報ありがとう。しかし、更新された質問を見つけて、あなたが私に同じことを助けることができるかどうかを確認してください。 – Kings

+0

答えられた後は質問を変更しないのが理想です。あなたは別の人に尋ねるべきです。 – Phil

+0

もう一度お尋ねします。実際、私は別の人に尋ねることを考えましたが、私は穏健派がそれを同様の投稿とみなして削除すると考えました。 – Kings

4

ワイルドカード文字を使用していないため、最初のクエリは何も一致しません。あなたの行には「花」という単語が含まれていますが、「花」を含む行は検索しています。クエリを次のように変更する必要があります。

select * from asset where contains(AssetDescription, 'flower*') 
+0

2つのクエリが論理的に同じではないという問題もあります。前者は「ひまわり」と一致し、後者は一致しません。 –

+0

@Justin - これでも役に立たなかった。 Uが何かを助けることができるならば、更新された質問を見てください。 – Kings

0

フルテキストインデックスを再構築してみてください。期限が切れているため、CONTAINSを使用するときに見つからない可能性があります。

+0

SQLサーバー2000でそれを行う方法。しかし、それは時代遅れである場合。それで、どのように1つのテーブルで正常に動作するのですか? – Kings

関連する問題