【发布时间】:2017-10-25 10:00:50
【问题描述】:
Table1 是虚拟表,fts4 和 TABLE2 是 normal table。
查询1(有效)
SELECT * FROM TABLE1 LEFT OUTER JOIN TABLE2 ON TABLE1.id=TABLE2.id WHERE TABLE1 MATCH 'sometext' LIMIT %d,%d
查询 2(不起作用)
SELECT * FROM TABLE2 LEFT OUTER JOIN TABLE1 ON TABLE1.id=TABLE2.id WHERE TABLE1 MATCH 'sometext' LIMIT %d,%d
Query2 出错
android.database.sqlite.SQLiteException:无法使用函数 MATCH 在请求的上下文中(代码 1)
由此看来,FTS 表格似乎需要在 LEFT OUTER JOIN 上排在第一位。为什么会这样?加入首先发生在应用 WHERE 子句之前。因此,如果它不适用于表类型不匹配,我假设它也不适用于 query1。任何人都请解释一下。内部发生了什么?此外,任何指向参考网站的链接都将不胜感激。
【问题讨论】:
-
你为什么要在 TABLE2 上加入 TABLE2 ?另外,MATCH 是用于匹配列,而不是匹配表。
-
这是一个错字。我编辑了它。对不起。也可以根据 sqlite doc table 为左侧指定。在这种情况下,它将尝试从所有列中进行匹配。
标签: android sqlite android-sqlite fts4