SQLite3, СОВПАДЕНИЕ и ИЛИ

#sqlite #match

#sqlite #совпадение

Вопрос:

Допустимо ли объединять MATCH с OR ?

Например,

SELECT * FROM myTable WHERE name MATCH 'andrew' OR name MATCH 'bill';

не генерирует никаких обращений, в то время как оба

SELECT * FROM myTable WHERE name MATCH 'andrew'; и

SELECT * FROM myTable WHERE name MATCH 'bill';

действительно выдает совпадения.

%%

Редактировать. Выбор с кодом ошибки ИЛИ равен 1, так что он каким-то образом искажен. Результат для второго и третьего равен 0, так что с ними все в порядке. Я не уверен, что не так.

Ответ №1:

http://www.sqlite.org/fts3.html#section_3

 SELECT * FROM myTable WHERE name MATCH 'andrew OR bill'
  

Комментарии:

1. 16 SDiZ: Спасибо за это. Есть ли способ смешать MATCH и REGEXP ?

2. Только для виртуальной таблицы доступно одно дополнительное информационное совпадение , для обычной таблицы используйте «like».

3. Как мне сопоставить половину слова? Предположим, я запросил только andr . Как мне использовать шаблон для этого.

4. Искал что-то подобное… ВЫБЕРИТЕ * Из mytable, ГДЕ СОВПАДАЮТ имена ‘(«Эндрю» ИЛИ «Дрю») Или Билл’; согласно sqlite.org /…

Ответ №2:

 SELECT * FROM myTable WHERE name MATCH 'andrew OR bill'

SELECT * FROM myTable WHERE name MATCH ('andrew' OR 'bill')

c.execute("SELECT * FROM myTable WHERE name MATCH (? OR ?)", ('andrew', 'bill'))
#safe from SQL injection attacks by escaping the variables.
  

SQLite понимает следующие двоичные операторы,
в порядке от наивысшего к наименьшему приоритету:

 ||
*    /    %
     -
<<   >>   amp;    |
<    <=   >    >=
=    ==   !=   <>   IS   IS NOT   IN   LIKE   GLOB   MATCH   REGEXP
AND

OR
  

Поддерживаемые операторы унарного префикса следующие:

 -         ~    NOT
  

https://www.sqlite.org/lang_expr.html

Комментарии:

1. MATCH (... OR ...) делает не то, что вы думаете. Все подвыражение передается расширению, подключенному к виртуальной таблице, и оно будет обрабатывать то, что было передано. Ни одно из расширений FTS, ни расширение spellfix1 не поддерживают ничего, кроме одной строки. Расширения fts поддерживают более богатый язык запросов, встроенный в строку , и не используют операторы SQLite.