Выполнение SQLite MATCH с использованием только отрицательных терминов - PullRequest
3 голосов
/ 27 марта 2011

Я недавно обнаружил, что это невозможно в SQLite:

 SELECT * FROM fruit WHERE fruit MATCH '-apple'

И все же это возможно:

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

Я пробовал это использовать FTS3 и FTS4 с теми же результатами.Почему для соответствия требуется хотя бы один неотрицательный термин?И как мне обойти это ограничение?Мне нужно вернуть все фрукты, которые не соответствуют "яблоку" ... вот и все.Есть идеи?

Ответы [ 3 ]

4 голосов
/ 27 марта 2011

Примерно так будет работать:

SELECT * FROM fruit 
WHERE fruit.oid NOT IN 
(
    SELECT oid FROM fruit WHERE fruit MATCH 'apple'
)
0 голосов
/ 30 ноября 2014

В качестве опции вы можете использовать вместо этого LIKE:

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

Или с учетом регистра:

SELECT * FROM fruit WHERE fruit NOT GLOB '*apple*';
0 голосов
/ 27 марта 2011

Почему бы просто не инвертировать поиск?

select * from fruit where fruit NOT match 'apple'

Вы можете использовать предложение EXCEPT:

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

, но это может бытьэффективный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...