2011-05-12 81 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這樣查詢到不匹配運算