Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLITE3:跨多个表查找ID_Sql_Sqlite - Fatal编程技术网

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_主表:-

    从sqlite\u master中选择*,其中名称为“%kos%”,类型为“table”

  • 循环浏览提取的表名,为每个表构建一个
    INSERT SELECT
    ,该表将把表中的行插入到1中创建的表中

    • 请特别参阅有关处理缺失列的信息
  • 完成后,将相应地填充在1中创建的表