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

o3imoua4  于 2023-10-23  发布在  SQLite
关注(0)|答案(4)|浏览(144)

当我在一个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')
    )
  • 两张table都有fts
  • 在两个匹配之间使用And运算符(而不是OR)正常运行。
    我如何解决这个问题或更改查询以查找具有上述条件的行?
kg7wmglp

kg7wmglp1#

你不能使用或运算,只要改变你的匹配关键字。like SELECT * FROM docs WHERE docs MATCH 'sqlite OR database';
或者你可以使用联合
SELECT docid FROM docs WHERE docs MATCH 'sqlite AND database' UNION SELECT docid FROM docs WHERE docs MATCH 'library';

vohkndzv

vohkndzv2#

MATCH作为一个函数有两个参数:

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

然而,使用MATCH的常用方法是作为一个操作符:

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

n53p2ov03#

此SQL在FTS 5中为我工作

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 ?
    )
  )

还应在FTS 3中工作;来源:https://sqlite.org/forum/forumpost?udc=1&name=1a2f2ffdd80cf795

ecbunoof

ecbunoof4#

MATCH必须不带括号使用。
与FTS一起使用时,ANDOR运算符必须使用大写字母。

相关问题