SQLITE3:跨多个表查找ID
我想对在特定条件下多个表中出现的代码进行分析。然而,我不认为数据库模式非常适合这项任务,但也许有一些我不知道的东西可以帮助我。下面是一个简化的模式:SQLITE3:跨多个表查找ID,sql,sqlite,Sql,Sqlite,我想对在特定条件下多个表中出现的代码进行分析。然而,我不认为数据库模式非常适合这项任务,但也许有一些我不知道的东西可以帮助我。下面是一个简化的模式: CREATE TABLE "batchDescription" ( id INTEGER NOT NULL, name TEXT NOT NULL UNIQUE, PRIMARY KEY (id) ); CREATE TABLE "simulationDetails" ( id IN
CREATE TABLE "batchDescription" (
id INTEGER NOT NULL,
name TEXT NOT NULL UNIQUE,
PRIMARY KEY (id)
);
CREATE TABLE "simulationDetails" (
id INTEGER NOT NULL,
ko_index_id INTEGER NOT NULL,
batch_description_id INTEGER NOT NULL,
data1 REAL NOT NULL,
data2 INTEGER NOT NULL,
PRIMARY KEY (id)
FOREIGN KEY(ko_index_id) REFERENCES "koIndex" (id)
FOREIGN KEY(batch_description_id) REFERENCES "batchDescription" (id)
);
CREATE TABLE "koIndex" (
id INTEGER NOT NULL,
number_of_kos INTEGER NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE "1kos" (
ko_index_id INTEGER NOT NULL,
ko1 INTEGER NOT NULL,
PRIMARY KEY (ko_index_id)
FOREIGN KEY(ko_index_id) REFERENCES "koIndex" (id)
);
CREATE TABLE "2kos" (
ko_index_id INTEGER NOT NULL,
ko1 INTEGER NOT NULL,
ko2 INTEGER NOT NULL,
PRIMARY KEY (ko_index_id)
FOREIGN KEY(ko_index_id) REFERENCES "koIndex" (id)
);
CREATE TABLE "3kos" (
ko_index_id INTEGER NOT NULL,
ko1 INTEGER NOT NULL,
ko2 INTEGER NOT NULL,
ko3 INTEGER NOT NULL,
PRIMARY KEY (ko_index_id)
FOREIGN KEY(ko_index_id) REFERENCES "koIndex" (id)
);
这将转到表“525kos”,其中包含ko1到ko525-ko1到ko525是表中未显示的主键ID。我想分析在特定条件下特定ID出现的频率。下面是一个简单的例子来说明:
我想计算当simulationDetails.data1不等于0时,“13kos”表中某个ID(比如127)(在任何koX列中)出现的次数。我将在bash命令行中名为ko.db的数据库上执行此操作,如下所示:
for ko_idx in {1..13}; do sqlite3 ko.db "select count(ko${ko_idx}) from '13kos' where ko${ko_idx} = 127 and ko_index_id in (select ko_index_id from simulationDetails where data1 != 0);"; done
这已经是缓慢和低效的,但与我想做的相比很简单。如果我想分析所有“Xkos”表中所有可能列中的所有ID,并将它们与data1等于或不等于零的位置进行比较,该怎么办
有人能告诉我一个更好的方法来做这件事吗?或者模式设计对这种分析来说不是很好,我不得不放弃
编辑:我想我应该添加一些额外的细节以避免混淆。我怀疑实现我想要的愿望的一个好方法是以某种方式将所有“XKO”表合并到一个临时表中,然后从该表中搜索特定ID。如何在不写出每个表名的情况下合并所有525个ko表
我如何组合所有525个ko表而不写出每个表
名字
从sqlite\u master中选择*,其中名称为“%kos%”,类型为“table”
INSERT SELECT
,该表将把表中的行插入到1中创建的表中
- 请特别参阅有关处理缺失列的信息