我想获取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
赞赏的想法
答案 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