簡體   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