2011-05-12 42 views
0

我想搜索那些行中不包含“拉贾斯坦邦”在状态字段使用匹配在MySql中。否定匹配

我的查询是这样的:

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

但是,它返回一个空集的结果。

这是什么问题?

回答

2

我相信这将这样的伎俩:

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

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

当心 - 我相信这将做一个全表扫描,这查询将不会从全文索引中受益你可能会希望。

至于你空的结果:

注: - 运营商只起到排除以其他方式由其他搜索条件匹配的行。因此,只包含前面的项的布尔模式搜索返回空结果。它不返回“的所有行除包含任何被排除条款的那些。”

Source

+0

雅做返回所有记录。谢谢... – Deepa 2011-05-12 04:27:33

+0

你可以建议我替代查询快速 – Deepa 2011-05-12 04:33:58

+0

你可以考虑这个查询:选择*从成员国不喜欢'%rajasthan%'然而,我的直觉告诉我,这可能是相同的速度或更慢。虽然可能值得一试 – 2011-05-12 14:22:57

0

- 运算符只作用于排除以其他方式由其他搜索条件匹配的行。因此,只包含前面的项的布尔模式搜索返回空结果。它不返回“的所有行除包含任何被排除条款的那些。”

因此,尝试追加到您的查询OR 1 = 1这样查询到不匹配运算