对所有数据库使用单一查询
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
包含在 table2
的 Column1
中声明的数据类型,但在 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,因此预计输出
我只需要一种方法来告诉我的查询在多个数据库上执行,而无需自己编写数据库的名称,就像一个循环。
注意:我只能提供通用数据,因为它与工作相关,抱歉。
不知道您正在使用的模式很难给出具体答案,但您可以尝试使用视图:
访问不同数据库中数据的唯一方法是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 语句。相反,您必须在程序中构建查询。
我需要同时对大量数据库(准确地说是 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
包含在 table2
的 Column1
中声明的数据类型,但在 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,因此预计输出
我只需要一种方法来告诉我的查询在多个数据库上执行,而无需自己编写数据库的名称,就像一个循环。
注意:我只能提供通用数据,因为它与工作相关,抱歉。
不知道您正在使用的模式很难给出具体答案,但您可以尝试使用视图:
访问不同数据库中数据的唯一方法是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 语句。相反,您必须在程序中构建查询。