【问题标题】:SQLite query with unknown foreign key具有未知外键的 SQLite 查询
【发布时间】:2017-06-13 10:56:18
【问题描述】:

我正在 vb.net 应用程序中使用 SQLite 数据库。数据库应该存储许多变量的时间序列数据。 现在我正在尝试使用以下 2 个表构建数据库:

  1. 表变量名称:

    CREATE TABLE IF NOT EXISTS varNames(id INTEGER PRIMARY KEY, varName TEXT UNIQUE);
    

看起来像这样:

ID   |  varName  
---------------  
1    |  var1  
2    |  var2  
...  |  ...  
  1. 表变量值:

    CREATE TABLE IF NOT EXISTS varValues(timestamp INTEGER, varValue FLOAT, id INTEGER, FOREIGN KEY(id) REFERENCES varNames(id) ON DELETE CASCADE);
    

看起来像这样:

timestamp  |  varValue  |  id  
------------------------------  
1          |  1.0345    |  1  
4          |  3.5643    |  1  
1          |  7.7866    |  2  
3          |  4.5668    |  2  
...        |  ....      | ...  

第一个表包含所有带有 ID 的变量名称。第二个表包含多个时间步长的每个变量的值(由时间戳表示)。外键通过变量 ID 链接表。

建立数据库工作正常。

现在我想查询数据库并绘制所选变量的时间序列。为此,我使用以下语句:

select [timestamp], [varValue] FROM varValues WHERE (SELECT id from varNames WHERE varName= '" & NAMEvariable & "');

由于用户不知道变量 ID,只知道变量的名称(在 NAMEvariable 中)我使用 ..WHERE (SELECT... 语句。看起来这确实会降低性能。时间序列有高达 50k 点。

有没有更好的方法来查询只能通过其名称来寻址的特定变量的值?

【问题讨论】:

    标签: database vb.net sqlite


    【解决方案1】:

    您可能应该使用join 查询,例如:

    SELECT a.[timestamp], a.varValue
    FROM varValues AS a, varNames AS b
    WHERE b.varName = <name>
      AND a.id = b.ID
    

    编辑:要查询多个参数,请使用以下内容:

    SELECT a.[timestamp], a.varValue
    FROM varValues AS a, varNames AS b
    WHERE b.varName IN (<name1>, <name2>, ...)
      AND a.id = b.ID
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 2016-12-28
      • 2012-12-25
      • 2015-01-04
      • 1970-01-01
      • 2020-11-15
      • 2013-07-07
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多