与比赛的否定

时间:2011-05-12 04:11:58

标签: mysql match against

我希望在MySql中使用匹配来搜索状态字段中不包含“rajasthan”的行。

我的疑问是:

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

但是,它会返回一组空的结果。

这有什么问题?

2 个答案:

答案 0 :(得分:4)

我相信这会解决问题:

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

来源:"Show all except" in MySQL Boolean Full-Text Searches

小心 - 我相信这会进行全表扫描,而且您可能希望此查询不会受益于FullText索引。

关于您的空结果:

  

注意: - 运算符仅用于排除其他搜索项以其他方式匹配的行。因此,布尔模式搜索仅包含以 - 开头的术语 - 返回空结果。它不会返回“除包含任何排除项的行之外的所有行。”

Source

答案 1 :(得分:-1)

- 运算符仅用于排除否则与其他搜索项匹配的行。因此,布尔模式搜索仅包含以 - 开头的术语 - 返回空结果。它不会返回“除包含任何排除项的行之外的所有行。”

因此,请尝试附加到您的查询OR 1 = 1,以便查询在没有MATCH运算符的情况下返回所有记录