#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
Комментарии:
1.
MATCH (... OR ...)
делает не то, что вы думаете. Все подвыражение передается расширению, подключенному к виртуальной таблице, и оно будет обрабатывать то, что было передано. Ни одно из расширений FTS, ни расширение spellfix1 не поддерживают ничего, кроме одной строки. Расширения fts поддерживают более богатый язык запросов, встроенный в строку , и не используют операторы SQLite.