对所有数据库使用单一查询

Use a single query on all databases

我需要同时对大量数据库(准确地说是 50 个)执行一个简单的查询

SELECT * FROM table1 WHERE column1 NOT IN(SELECT column1 FROM table2)

我正在使用:
SQLite Studio 3.1.0
和 .sqlite 数据库

SQLite 不允许使用 DECLARE,所以我不能使用变量来存储所有的数据库名称

数据库名称结构:
commonpart_CUSTOM


更新:
我意识到我没有解释我的查询。我想 select 来自 table1 的所有内容,其中 column1 与来自 table2

column1 中包含的值不匹配

我必须对 50 个具有相同结构但具有不同数据的数据库进行此操作,而不是一次对一个数据库执行查询。我希望能够在我所有的数据库上执行它,只有一个 table 用于合并所有结果,但也声明它来自哪个数据库,尽管不必自己编写所有数据库名称。

-Database1
  -Table1
     -Column1
     -Column2
     -Column3
     -Column4
  -Table2
     -Column1
     -Column2
     -Column3
  -Table3
     -Column1
     -Column2
     -Column3

-Database2
  -Table1
     -Column1
     -Column2
     -Column3
     -Column4
  -Table2
     -Column1
     -Column2
     -Column3
  -Table3
     -Column1
     -Column2
     -Column3

Column1 来自 table1
包含在 table2Column1 中声明的数据类型,但在 100 万行中,因此它是重复的

e.g.
row1 AAA
row2 AAA
row3 BBB
row4 FLM

Column1 来自 table2
包含声明的数据类型
e.g. Types: AAA, BBB, CCC, FFF

预期输出:

╔════╦══════════════╦════════════╦════════════╦════════════╦════════════╗
║    ║   Database   ║   Column1  ║   Column2  ║   Column3  ║  Column4   ║
╠════╬══════════════╬════════════╬════════════╬════════════╬════════════╣
║  1 ║ Database1    ║    FLM     ║Data        ║Data        ║Data        ║
║  2 ║ Database2    ║     -      ║Data        ║Data        ║Data        ║
║  3 ║ Database3    ║    NULL    ║Data        ║Data        ║Data        ║
║  4 ║ Database4    ║    NULL    ║Data        ║Data        ║Data        ║
╚════╩══════════════╩════════════╩════════════╩════════════╩════════════╝

Column1 from Expected Output 包含与 Column1 from table2 中定义的数据类型不匹配的所有数据类型,Database 列包含名称输出来自的数据库,其他列包含找到不匹配值的行的所有其他列


由于第 4 行 table1 中的 Column1 包含 table2 中的 Column1 中不存在的 FLM,因此预计输出

我只需要一种方法来告诉我的查询在多个数据库上执行,而无需自己编写数据库的名称,就像一个循环。

注意:我只能提供通用数据,因为它与工作相关,抱歉。

不知道您正在使用的模式很难给出具体答案,但您可以尝试使用视图:

https://www.tutorialspoint.com/sqlite/sqlite_views.htm

访问不同数据库中数据的唯一方法是ATTACH它们。 默认 limit for attached databases 为 10,因此您必须编译自己版本的 SQLite 库以增加此限制。 一旦你有了它,你就可以在所有五十张桌子上使用 compound query

ATTACH '...' as db1;
ATTACH '...' as db2;
...

SELECT 'Database1' AS DB, * FROM db1.Table1 WHERE Column1 NOT IN (SELECT Column1 FROM db1.Table2)
UNION ALL
SELECT 'Database2'      , * FROM db2.Table1 WHERE Column1 NOT IN (SELECT Column1 FROM db2.Table2)
UNION ALL
...

SQLite 是一个嵌入式数据库,设计用于 'real' 编程语言。因此,不可能从 SQL 本身内部动态构造 SQL 语句。相反,您必须在程序中构建查询。