如何列出SQLite数据库中特定表的所有可用视图?

9

我希望能够访问Sqlite中任何特定表的所有特定视图。我知道可以使用sqlite_master获取数据库中所有可用表的列表。

SELECT name from sqlite_master WHERE type='table'; 

以下是所有可用视图的列表,使用

SELECT name from sqlite_master WHERE type ='view';

但我想找到特定表的所有可用视图。我该怎么做?

2个回答

7

无需使用extension-functions.c;只需使用“LIKE”运算符:

SELECT name FROM sqlite_master WHERE type = 'view' and sql LIKE "%_tablename_%";

当表名包含其他表名子字符串或是SQL保留字(例如“here”或“rom”)的子字符串时,您会产生错误匹配。您可以通过以下方法消除后者:
SELECT name FROM sqlite_master WHERE type = 'view' AND sql LIKE "% FROM %tablename% WHERE %";

提供的视图必须符合典型模型,才能找到您需要的内容。

我想补充一点:如果你在数据库中有一个类似名称的表(table1和table2),并且运行此命令,它将显示两个表的视图,因为它是“%table%”。要解决这个问题,只需添加括号。所以:SELECT name from sqlite_schema WHERE type='view' AND sql LIKE '%[table_name]%'; - FastFinge

1

在extension-functions.c中使用charindex函数来搜索sqlite_master中的Sql列,以查找您的表的名称。

extension-functions.c(请参考this page底部)是一个由用户贡献的模块,为SQL查询提供数学和字符串扩展函数,使用可加载扩展机制。

您的最终查询应该类似于以下内容(未经测试):

SELECT name from sqlite_master 
  WHERE type ='view' AND charindex(Sql, "tableName") > 0;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接