sqlite - SQLite:计算多个表中的记录数
问题描述
使用 SQLite,我可以获取数据库中的所有表名:
SELECT name AS Tablename FROM sqlite_master WHERE type = 'table'
结果将是一些表名,例如:
表名:
汽车
飞机
巴士
我怎么会有一个 SQL 查询来计算找到的每个表的记录数,结果应该是:
表名记录:
汽车 100
飞机 200
巴士 300
我知道在这个例子中我可以简单地运行 3 个 SELECT COUNT() 语句,但是表的数量可以变化,所以我不能硬编码固定数量的 SELECT COUNT()
解决方案
语句中的所有表名和列名在编译时都需要知道,因此您不能动态地执行此操作。
您必须根据从中获取表名的结果以编程方式构建一个新的查询字符串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);
推荐阅读
- php - 页面内容较少时如何将页脚粘贴到网站底部?
- javascript - 使用组件类中的变量来修改伪元素上的属性值的 Angular/Mobile 友好方式是什么?
- php - 我可以在 php 中分配如下所示的变量名吗?
- django - AWS 安全组和 Django 电子邮件 SMTP TLS 端口 587
- r - 我没有合并数据集。为什么 R 一直说“名称与以前的名称不匹配”?
- php - 将 id 从控制器索引传递到存储 - Laravel
- dart - 第一次单击颤动后如何禁用按钮?
- memory - {jpillora/chisel} Chisel 在 ARM 上的高 RAM 使用率
- javascript - 解决不从承诺中返回
- jquery - 固定标题表 - 表调整大小