[英]SQLITE3: find IDs across multiple tables
我想对某些条件下在多个表中出现的代码进行分析。 但是,我认为数据库模式不太适合该任务,但是也许我不知道有什么可以帮助我的。 这是一个简化的模式:
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列中)发生的次数。我将在名为ko的数据库中进行此操作bash命令行中的.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等于但不等于零的位置进行比较该怎么办?
谁能指导我做一个更好的方法,或者架构设计对这种分析不是很好,我将不得不放弃?
编辑:以为我会添加一些额外的细节,以避免混淆。 我怀疑实现我想要的一个好方法是将所有“ Xkos”表组合到一个临时表中,然后从该表中搜索某些ID。 如何在不写出每个表名称的情况下合并所有525 ko表?
如何在不写出每个表名称的情况下合并所有525 ko表?
创建一个表,该表具有与最大表(要合并到的表)相同的列数,并允许空值。
使用以下命令查询sqlite_master表:
SELECT * from sqlite_master WHERE name LIKE '%kos%' AND type = 'table'
循环浏览提取的表名,为每个表构建一个INSERT SELECT
,将表中的行插入到用1创建的表中。
完成所有操作后,将相应地填充在1中创建的表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.