我有一个使用以下查询创建的 TRANSACTIONS 表:
CREATE TABLE TRANSACTIONS (ID INTEGER PRIMARY KEY, DESC VARCHAR(255), COMMENT VARCHAR(1024), INVOICE VARCHAR(255));
然后我使用查询创建了 FTS5 虚拟表:
CREATE VIRTUAL TABLE TRANSACTIONS_FTS USING FTS5(
content="TRANSACTIONS",
content_rowid="ID",
DESC,
COMMENT,
INVOICE,
);
然后我使用以下查询填写了 TRANSACTIONS_FTS:
INSERT INTO TRANSACTIONS_FTS (rowid, DESC, COMMENT, INVOICE) SELECT ID, DESC, COMMENT, INVOICE FROM TRANSACTIONS;
现在我正在运行 2 个搜索查询。第一个:
SELECT * FROM TRANSACTIONS_FTS WHERE TRANSACTIONS_FTS MATCH 'cabana';
这给了我 27 个结果。
而第二个
SELECT DISTINCT T.*
FROM TRANSACTIONS AS T
JOIN (
SELECT *
FROM TRANSACTIONS_FTS
WHERE TRANSACTIONS_FTS MATCH 'cabana'
) AS T_MATCH ON T.ID = T_MATCH.rowid;
给出 0 个结果。为什么它没有给出相同的结果?如何调试连接?
我终于能够让它发挥作用了。似乎 FTS 表中的 rowid 不会返回,除非您直接指定它。所以有效的搜索查询是:
SELECT T.*
FROM TRANSACTIONS AS T
JOIN (
SELECT rowid
FROM TRANSACTIONS_FTS
WHERE TRANSACTIONS_FTS MATCH 'Cabana' -- Add more words as needed
) AS T_MATCH ON T.ID = T_MATCH.rowid