2017-06-13 93 views
0

我正在玩vb.net應用程序中的SQLite數據庫。數據庫應該存儲許多變量的時間序列數據。 現在我想建立2個表的數據庫如下:帶有未知外鍵的SQLite查詢

  1. 表varNames:

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

它看起來像這樣:

ID | varName 
--------------- 
1 | var1 
2 | var2 
... | ... 
  • 表varValues:

    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 & "'); 
    

    由於用戶不知道variabel ID,變量(在NAMEvariable)的只有名字,我用..WHERE(SELECT ...語句看來。這樣真的會減慢性能。該時間序列有高達50K點。

    有沒有更好的方式來查詢值只能通過它的名字來解決特定的變量?

    回答

    0

    你或許應該使用一個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