[英]SQLite Android Join operation on FTS4
Table1
是虛擬表與fts4
和TABLE2
是normal 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.