sqlite fts4在使用group by时不能使用偏移功能
Posted
技术标签:
【中文标题】sqlite fts4在使用group by时不能使用偏移功能【英文标题】:sqlite fts4 can not use offsets funtion when use group by 【发布时间】:2015-03-31 03:52:05 【问题描述】:我有两张桌子: 表格1: fts 虚拟表
docid 长自动增加, 内容文本,(fts 列)
表 2: 元数据表
docid Long(table1 docid的外键), 用户名文本, 时间戳长
sql: select table1.docid content, username, MAX(timestamp) as time, offsets(table1) from table1, table2 where content Match "a" AND table1.docid = table2.docid group by username order by timestamp desc limit 3;
这个sql不会执行,但是我删除“group by username”,它可以执行。为什么?
【问题讨论】:
对我有用,除非我删除 GROUP BY。 你找到解决办法了吗? 【参考方案1】:offsets
函数仅适用于 FTS 表,但连接的结果不再是 FTS 表(取决于查询优化器如何决定执行连接)。
您必须改为分两步进行搜索:
SELECT docid,
content,
offsets,
username,
MAX(timestamp)
FROM (SELECT docid,
content,
offsets(table1) AS offsets
FROM table1
WHERE content MATCH 'a')
JOIN table2 USING (docid)
GROUP BY username
ORDER BY timestamp DESC
LIMIT 3;
【讨论】:
仍然出现无法在请求的上下文中使用函数偏移量的错误,我的sql是SELECT类型,MIN(subtype) as minSubtype, entity_id, aux_index, timestamp, content, offset FROM (SELECT docid, content , offsets(FtsIndexContact) as offset FROM FtsIndexContact WHERE content MATCH ?) JOIN FtsMetaContact USING(docid) WHERE type = 131075 AND status >= 0 GROUP BY aux_index ORDER BY talktime desc LIMIT 4;以上是关于sqlite fts4在使用group by时不能使用偏移功能的主要内容,如果未能解决你的问题,请参考以下文章
在 SQLite 的 GROUP_CONCAT 函数中使用 ORDER BY 子句