【发布时间】:2019-09-23 20:49:21
【问题描述】:
假设我在 sqlite 中有一个如下表:
`name` `age`
"bob" 20 (rowid=1)
"tom" 30 (rowid=2)
"alice" 19 (rowid=3)
我想用最少的存储空间来存储下表的结果:
SELECT * FROM mytable WHERE name < 'm' ORDER BY age
如何从这个结果集中存储一个虚拟表,它只会给我有序的结果集。换句话说,以有序的方式存储rowid(在上面它将是3,1),而不会将所有数据保存到单独的表中。
例如,如果我以排序顺序仅使用 rowid 存储此信息:
CREATE TABLE vtable AS
SELECT rowid from mytable WHERE name < 'm' ORDER BY age;
然后我相信每次我需要查询vtable 时,我都必须使用rowid 将其加入到原始表中。有没有办法做到这一点,以便 vtable “知道”它基于外部表的内容(我相信在创建 fts 索引时这被称为外部内容 - https://sqlite.org/fts5.html#external_content_tables)。
【问题讨论】:
-
select rowid而不是select *? -
@GordonLinoff 因此,如果我按如下方式进行插入:
CREATE TABLE vtable AS SELECT rowid from mytable ORDER BY name;,当我查询该表时如何获得完整的数据集?每次我进行查询时不需要加入 id 吗? -
@GordonLinoff 刚刚用一个例子更新了这个问题。
-
所以您想将表的有序子集保存到另一个表中?
-
从您的上一条评论中可以清楚地看出您想要一个常规表格,并且由于您知道如何创建它,所以我不明白您的问题的重点。
标签: sql sqlite virtual-table