我需要同时对大量数据库(准确地说是50个)执行一个简单的查询
SELECT * FROM table1 WHERE column1 NOT IN(SELECT column1 FROM table2)
我正在使用:
SQLite Studio 3.1.0
和.sqlite数据库
SQLite不允许使用DECLARE
,因此我无法使用变量存储所有数据库名称
数据库名称结构:
commonpart_CUSTOM
更新:
我意识到我没有解释我的疑问。我想从table1
中选择column1
所有内容,其中column1
与table2
中-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
中包含的值不匹配
我必须对50个数据库进行此操作,这些数据库具有相同的结构但具有不同的数据,而不是一次在一个数据库上执行查询。我希望能够在我的所有数据库上执行它,只有一个表可以合并所有结果,但也可以声明它来自哪个数据库,但不必自己编写所有数据库名称。
Column1
来自table1
的 Column1
包含来自table2
的{{1}}中声明的数据类型,但是包含在1M亿行中,因此它是重复的
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
的 Expected Output
包含与Column1
中table2
中定义的数据类型不匹配的所有数据类型,Database
列包含数据库的名称输出来自哪个,其他列包含发现不匹配值的行的所有其他列
由于第4行Column1
的{{1}}包含table1
Column1
中不存在的FLM,因此需要输出
我只需要一种方法来告诉我的查询在多个数据库上执行,而无需自己编写数据库的名称,就像循环一样。
注意:我只能提供通用数据,因为它与工作有关,抱歉。
答案 0 :(得分:0)
很难给出一个不知道你正在使用的架构的具体答案,但你可以尝试使用一个视图:
答案 1 :(得分:0)
访问不同数据库中数据的唯一方法是ATTACH。 默认limit for attached databases为10,因此您必须编译自己的SQLite库版本才能增加此限制。 完成后,您可以在所有50个表中使用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是一个嵌入式数据库,旨在从“真正的”编程语言中使用。因此,无法从SQL本身动态构造SQL语句。相反,您必须在程序中构建查询。