2

MySql での照合を使用して、状態フィールドに「rajasthan」を含まない行を検索したい。

私のクエリはこれです:

SELECT * from member where MATCH(state) AGAINST('-rajasthan' IN BOOLEAN MODE) 

ただし、結果の空のセットを返します。

これの何が問題なのですか?

4

2 に答える 2

8

これでうまくいくと思います:

SELECT 
  *
FROM 
  Member
WHERE 
  NOT MATCH (state) AGAINST ('+rajasthan' IN BOOLEAN MODE)

ソース: MySQL Boolean Full-Text Searches の「Show all except」

注意してください-これは完全なテーブルスキャンを実行し、このクエリはフルテキストインデックスの恩恵を受けません.

あなたの空の結果に関して:

注: - 演算子は、他の検索語と一致する行を除外するためだけに機能します。したがって、前に - が付いている用語のみを含むブール モードの検索では、空の結果が返されます。「除外された用語を含む行を除くすべての行」は返されません。</p>

ソース

于 2011-05-12T04:25:27.430 に答える
-1

- 演算子は、他の検索語と一致する行を除外するためだけに機能します。したがって、前に - が付いている用語のみを含むブール モードの検索では、空の結果が返されます。「除外された用語を含む行を除くすべての行」は返されません。</p>

したがって、クエリに追加して、クエリOR 1 = 1が MATCH 演算子なしですべてのレコードを返すようにしてください

于 2011-05-12T04:32:23.557 に答える