繁体   English   中英

FTS4上的SQLite Android Join操作

[英]SQLite Android Join operation on FTS4

Table1是虚拟表与fts4TABLE2normal table

Query1 (WORKS)

 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一起使用。 有人请解释一下。 内部发生了什么? 此外,任何参考站点的链接都将得到解释。

MATCH仅对FTS表本身起作用,因此必须在连接之前执行。 在第二个查询中,数据库首先查找匹配的行(使用外部联接,它在联接顺序中没有选择),并且该临时结果不再是FTS表。

使用FTS时,通常最好将FTS搜索(或其他搜索)移到子查询中:

SELECT *
FROM Table2 LEFT JOIN (SELECT *
                       FROM Table1
                       WHERE Table1 MATCH ...)
            USING (id);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM