Sqlite FTS,在匹配运算符之间使用 OR

问题描述 投票:0回答:4

当我在 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
)可以正常运行。

如何解决此问题或更改查询以查找具有上述条件的行?

sqlite match fts3
4个回答
1
投票

您不能使用OR运算,只需更改您的匹配关键字即可。 喜欢 SELECT * FROM 文档,其中文档匹配“sqlite OR 数据库”;

或者也许你可以使用 union

从文档中选择 docid,其中文档匹配“sqlite AND 数据库” 联盟 从文档中选择 docid,其中文档匹配“库”;


1
投票

MATCH 作为函数有两个参数:

... WHERE match('value', SomeColumn) ...

但是,使用 MATCH 的常用方法是作为运算符:

... WHERE SomeColumn MATCH 'value' ...

0
投票

这个 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


-1
投票

MATCH
必须不带括号使用。

与 FTS 一起使用时,

AND
OR
运算符必须为大写字母。

© www.soinside.com 2019 - 2024. All rights reserved.