sqlite计数由子查询标识的表行

时间:2014-02-07 14:42:53

标签: sqlite

我想获取Sqlite3数据库中每个表中的行数。我想避免写出一个简单的查询。我可以得到这样的表格列表:

SELECT name FROM sqlite_master WHERE type='table'

我想在像这样的子查询中使用它:

select count (*) from (SELECT name FROM sqlite_master WHERE type='table');

但只返回子查询中的总行数,这不是我想要的。

如何编写将列出每个表及其计数的查询?

我已经看过动态SQL 这类事情,但我不认为SQLite有这个。

我已经编写了 bash 循环来执行此操作,但我更愿意将其作为单个查询执行

for t in $(sqlite3 data.db "SELECT name FROM sqlite_master WHERE type='table'"); do
  echo -n "$t = "; sqlite3 data.db "SELECT COUNT(*) FROM $t;"
done

赞赏的想法

2 个答案:

答案 0 :(得分:3)

如果您想了解这些值以进行调试,请查看sqlite3_analyzer工具的输出。

如果要在程序中使用这些值,则必须在程序中动态生成查询。

答案 1 :(得分:1)

我使用以下shell语法从正在调试的数据库中的表中盲目获取计数。

for i in `sqlite3 database.db "SELECT name FROM sqlite_master WHERE 
type='table';"`; do echo -n $i\ \=\ ; sqlite3 database.db "SELECT 
COUNT(*) FROM $i;"; done

cols = 0
sqlite_sequence = 0
datacols = 17
hits = 0
host = 0
document = 0
admin = 2
comments = 0