Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Database 具有未知外键的SQLite查询_Database_Vb.net_Sqlite - Fatal编程技术网

Database 具有未知外键的SQLite查询

Database 具有未知外键的SQLite查询,database,vb.net,sqlite,Database,Vb.net,Sqlite,我正在vb.net应用程序中玩SQLite数据库。数据库应该存储许多变量的时间序列数据。 现在,我正在尝试使用以下两个表构建数据库: 表变量名: CREATE TABLE IF NOT EXISTS varNames(id INTEGER PRIMARY KEY, varName TEXT UNIQUE); 看起来是这样的: ID | varName --------------- 1 | var1 2 | var2 ... | ... time

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

表变量名:

CREATE TABLE IF NOT EXISTS varNames(id INTEGER PRIMARY KEY, varName TEXT UNIQUE);
看起来是这样的:

ID   |  varName  
---------------  
1    |  var1  
2    |  var2  
...  |  ...  
timestamp  |  varValue  |  id  
------------------------------  
1          |  1.0345    |  1  
4          |  3.5643    |  1  
1          |  7.7866    |  2  
3          |  4.5668    |  2  
...        |  ....      | ...  
表1:变量值:

CREATE TABLE IF NOT EXISTS varValues(timestamp INTEGER, varValue FLOAT, id INTEGER, FOREIGN KEY(id) REFERENCES varNames(id) ON DELETE CASCADE);
看起来是这样的:

ID   |  varName  
---------------  
1    |  var1  
2    |  var2  
...  |  ...  
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 & "');
因为用户不知道VariableID,所以我只使用NAMEvariable中的变量名..WHERE SELECT。。。陈述这似乎真的会降低性能。时间序列最多有5万个点

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

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

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