我最近发现在SQLite中这是不可能的:
SELECT * FROM fruit WHERE fruit MATCH '-apple'
然而这是可能的:
SELECT * FROM fruit WHERE fruit MATCH 'pear -apple'
我使用FTS3和FTS4尝试了相同的结果。为什么匹配需要至少一个非否定的术语?我该如何解决这个限制?我需要归还所有与“苹果”不匹配的水果......就是这样。有什么想法吗?
答案 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*';