仅使用否定的术语执行SQLite MATCH

时间:2011-03-27 15:46:03

标签: sql database sqlite full-text-search

我最近发现在SQLite中这是不可能的:

 SELECT * FROM fruit WHERE fruit MATCH '-apple'

然而这是可能的:

 SELECT * FROM fruit WHERE fruit MATCH 'pear -apple'

我使用FTS3和FTS4尝试了相同的结果。为什么匹配需要至少一个非否定的术语?我该如何解决这个限制?我需要归还所有与“苹果”不匹配的水果......就是这样。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

这样的事情会起作用:

SELECT * FROM fruit 
WHERE fruit.oid NOT IN 
(
    SELECT oid FROM fruit WHERE fruit MATCH 'apple'
)

答案 1 :(得分:0)

为什么不简单地反转搜索?

select * from fruit where fruit NOT match 'apple'

<击> 您可以使用EXCEPT子句:

select * from fruit except select * from fruit where fruit match 'apple';

但这可能效率不高。

答案 2 :(得分:0)

作为一种选择,您可以使用&#39; LIKE&#39;代替:

 SELECT * FROM fruit WHERE fruit NOT LIKE '%apple%';

或区分大小写:

SELECT * FROM fruit WHERE fruit NOT GLOB '*apple*';