繁体   English   中英

SQLITE3:在多个表中查找ID

[英]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表?

  1. 创建一个表,该表具有与最大表(要合并到的表)相同的列数,并允许空值。

  2. 使用以下命令查询sqlite_master表:

    SELECT * from sqlite_master WHERE name LIKE '%kos%' AND type = 'table'

  3. 循环浏览提取的表名,为每个表构建一个INSERT SELECT ,将表中的行插入到用1创建的表中。

  4. 完成所有操作后,将相应地填充在1中创建的表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM