请帮助解决以下查询:
sqlite 查询获取所有表名列表以及其中的记录数:
我想获取 Sqlite3 数据库中每个表的行数。我想避免写出手写查询。我可以获得这样的表列表:
选择名称 FROM sqlite_master WHERE type='table'
我想在子查询中使用它,如下所示:
select count (*) from (SELECT name FROM sqlite_master WHERE type='table');
但只会返回子查询中的总行数,这不是我想要的。
也许您使用的结果ANALYZE创建一个解决方法。它创建内部模式对象sqlite_stat1
2.6.3. sqlite_stat1 表
sqlite_stat1是由ANALYZE命令创建的内部表
并用于保存有关表和索引的补充信息
查询规划器可以使用它来帮助找到更好的方法
执行查询。应用程序可以更新、删除、插入
或删除 sqlite_stat1 表,但不得创建或更改
sqlite_stat1 表。 sqlite_stat1 表的架构如下
如下:
CREATE TABLE sqlite_stat1(tbl,idx,stat);
通常每个索引只有一行,索引由
sqlite_stat1.idx 列中的名称。 sqlite_stat1.tbl 列是
索引所属的表的名称。在每一行中,
sqlite_stat.stat 列将是一个由以下列表组成的字符串
整数后跟零个或多个参数。这个中的第一个整数
list 是索引中的大致行数。 (的数量
索引中的行数与表中的行数相同,
部分索引除外。)......
如果没有部分索引,则SELECT tbl,cast(stat as INT)
将返回每个表中的行数,除非表有 0 行。
此 SQL 在小型(25MB、34 个表、26 个索引、33K+ 行)生产数据库上给出了预期结果。您的里程可能(将会?)有所不同。
ANALYZE;
select DISTINCT tbl_name, CASE WHEN stat is null then 0 else cast(stat as INT) END numrows
from sqlite_master m
LEFT JOIN sqlite_stat1 stat on m.tbl_name = stat.tbl
where m.type='table'
and m.tbl_name not like 'sqlite_%'
order by 1;
--drop table sqlite_stat1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)