当我在 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
)可以正常运行。
如何解决此问题或更改查询以查找具有上述条件的行?
您不能使用OR运算,只需更改您的匹配关键字即可。 喜欢 SELECT * FROM 文档,其中文档匹配“sqlite OR 数据库”;
或者也许你可以使用 union
从文档中选择 docid,其中文档匹配“sqlite AND 数据库” 联盟 从文档中选择 docid,其中文档匹配“库”;
MATCH 作为函数有两个参数:
... WHERE match('value', SomeColumn) ...
但是,使用 MATCH 的常用方法是作为运算符:
... WHERE SomeColumn MATCH 'value' ...
这个 SQL 在 FTS5 中对我有用
select
*
from
"card"
inner join "note" on "card"."noteId" = "note"."id"
inner join "noteFtsTag" on "noteFtsTag"."rowid" = "note"."rowid"
inner join "cardFtsTag" on "cardFtsTag"."rowid" = "card"."rowid"
where
(
"noteFtsTag"."rowid" in (
select
"rowid"
from
"noteFtsTag"
where
"noteFtsTag"."tags" match ?
)
or "cardFtsTag"."rowid" in (
select
"rowid"
from
"cardFtsTag"
where
"cardFtsTag"."tags" match ?
)
)
也应该在 FTS3 中工作;来源:https://sqlite.org/forum/forumpost?udc=1&name=1a2f2ffdd80cf795
MATCH
必须不带括号使用。
与 FTS 一起使用时,
AND
和 OR
运算符必须为大写字母。