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

sta*_*fry 8 sqlite

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

SELECT name FROM sqlite_master WHERE type='table'
Run Code Online (Sandbox Code Playgroud)

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

select count (*) from (SELECT name FROM sqlite_master WHERE type='table');
Run Code Online (Sandbox Code Playgroud)

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

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

我见过这种事情的动态 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
Run Code Online (Sandbox Code Playgroud)

想法赞赏

小智 7

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

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

cols = 0
sqlite_sequence = 0
datacols = 17
hits = 0
host = 0
document = 0
admin = 2
comments = 0
Run Code Online (Sandbox Code Playgroud)


CL.*_*CL. 4

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

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