首页 > 解决方案 > SQLite:计算多个表中的记录数

问题描述

使用 SQLite,我可以获取数据库中的所有表名:

SELECT name AS Tablename FROM sqlite_master WHERE type = 'table'

结果将是一些表名,例如:

表名:
汽车
飞机
巴士

我怎么会有一个 SQL 查询来计算找到的每个表的记录数,结果应该是:

表名记录:
汽车 100
飞机 200
巴士 300

我知道在这个例子中我可以简单地运行 3 个 SELECT COUNT() 语句,但是表的数量可以变化,所以我不能硬编码固定数量的 SELECT COUNT()

标签: sqlitecountrecord

解决方案


语句中的所有表名和列名在编译时都需要知道,因此您不能动态地执行此操作。

您必须根据从中获取表名的结果以编程方式构建一个新的查询字符串sqlite_master。像您提到的每个表一个查询,或者通过创建看起来像的东西一起查询

SELECT 'table1' AS Tablename, count(*) AS Records FROM table1
UNION ALL
SELECT 'table2', count(*) FROM table2
-- etc.

您没有提及您正在使用哪种语言,因此在功能样式的伪代码中:

var allcounts = query("SELECT name FROM sqlite_master WHERE type = 'table'")
                .map(name -> "SELECT '$name' AS Tablename, count(*) AS Records FROM \"$name\"")
                .join(" UNION ALL ");
var totals = query(allcounts);

推荐阅读