【问题标题】:sqlite count rows of tables identified by subquerysqlite 计算由子查询标识的表的行数
【发布时间】:2014-02-07 14:42:53
【问题描述】:

我想获取 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

赞赏的想法

【问题讨论】:

  • 你需要这个数有什么用?
  • 查看每种类型有多少条记录。最终从sqlite_sequence 中删除空表的条目。

标签: sqlite


【解决方案1】:

我使用以下 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 在程序中动态生成查询是指在我的 SQL 中还是在调用 SQL 的 程序 中,例如 bash sn- p 在我的问题中?我假设您的意思是后者,在这种情况下,我推断您的意思是 dymanic SQL 在 SQLite 中是不可能的。这个推论正确吗?
    • 是的; SQLite 旨在嵌入到“真实”程序中。
    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    相关资源
    最近更新 更多