sql - 是否可以在 SQLite 查询中使用返回的列值作为表名?

标签 sql sqlite

我想编写一个查询来检查 SQLite 数据库中的所有表以获取一条信息,以简化我的事件后诊断(性能并不重要)。

我希望编写一个使用 the sqlite_master table 的查询获取表列表,然后查询它们,所有这些都在一个查询中:

SELECT Name 
FROM sqlite_master
WHERE Type = 'table' AND (
    SELECT count(*)
    FROM Name
    WHERE conditions
    ) > 0;

但是,当尝试执行这种类型的查询时,我收到错误no such table: Name。是否有替代语法允许这样做,或者根本不支持它?

最佳答案

SQLite 被设计为嵌入式数据库,即与“真正的”编程语言一起使用。 为了能够使用此类动态构造,您必须超越 SQLite 本身:

cursor.execute("SELECT name FROM sqlite_master")
rows = cursor.fetchall()
for row in rows:
    sql = "SELECT ... FROM {} WHERE ...".format(row[0])
    cursor.execute(sql)

关于sql - 是否可以在 SQLite 查询中使用返回的列值作为表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31600700/

相关文章:

php - 如何从我的数据库中过滤这些数据?

python - 在 Flask-SQLAlchemy 中使用 ISO 时间戳

android - 当应用程序崩溃时,共享首选项会重置数据。请指导

iphone - 按顺序使用 sqlite 数据库中的表行填充 TableView 部分

javascript - 在 Chrome 浏览器的上下文中通过 javascript 定位 SQLite 数据库

Sql IN 子句会降低性能

php - MySQL 查询 : JOIN multiple tables with ORDER BY

Mysql - 金额之间的平衡

java - Eclipse 提示无法执行操作,因为连接池已关闭

mysql - 如何根据一个或多个结果集中的列删除重复项