Sqlite FTS,在匹配运算符之间使用或
Sqlite FTS, Using OR between match operators
当我在 sqlite 引擎(android 或 sqlitebrowser)中执行以下查询时,它会抛出一个异常 unable to use function MATCH in the requested context
。
select
a.Body1,
b.Body2
from
tbl1_fts as a,
tbl2_fts as b
where
a.ID = b.ParentID and
(
a.Body1 match('value') or
b.Body2 match('value')
)
-两个表都有fts.
- 在两个匹配项之间使用 And
运算符(而不是 OR
)运行正常。
如何解决此问题或更改查询以查找符合上述条件的行?
作为函数的 MATCH 有两个参数:
... WHERE match('value', SomeColumn) ...
但是,通常使用 MATCH 的方法是作为运算符:
... WHERE SomeColumn MATCH 'value' ...
您不能使用 OR 操作,只需更改您的匹配关键字即可。
像
SELECT * FROM docs WHERE docs MATCH 'sqlite OR database';
或者你可以使用 union
SELECT docid FROM docs WHERE docs MATCH 'sqlite AND database'
联盟
SELECT docid FROM docs WHERE docs MATCH 'library';
MATCH
必须不带括号使用。
与 FTS 一起使用时,AND
和 OR
运算符必须大写。
当我在 sqlite 引擎(android 或 sqlitebrowser)中执行以下查询时,它会抛出一个异常 unable to use function MATCH in the requested context
。
select
a.Body1,
b.Body2
from
tbl1_fts as a,
tbl2_fts as b
where
a.ID = b.ParentID and
(
a.Body1 match('value') or
b.Body2 match('value')
)
-两个表都有fts.
- 在两个匹配项之间使用 And
运算符(而不是 OR
)运行正常。
如何解决此问题或更改查询以查找符合上述条件的行?
作为函数的 MATCH 有两个参数:
... WHERE match('value', SomeColumn) ...
但是,通常使用 MATCH 的方法是作为运算符:
... WHERE SomeColumn MATCH 'value' ...
您不能使用 OR 操作,只需更改您的匹配关键字即可。 像 SELECT * FROM docs WHERE docs MATCH 'sqlite OR database';
或者你可以使用 union
SELECT docid FROM docs WHERE docs MATCH 'sqlite AND database' 联盟 SELECT docid FROM docs WHERE docs MATCH 'library';
MATCH
必须不带括号使用。
与 FTS 一起使用时,AND
和 OR
运算符必须大写。