2014-07-14 42 views
0

我有一個SQLITE數據庫與2表。該表的一般結構:從SQLITE表比較和複製值

TABLE1 (about 2000000 records) 
id|name|number1|number2|...|... 
1|aaa |12.23 |43.17 |...|... 
2|bbb |54.145 |77.23 |...|... 
3|ccc |65.2345|13.234 |...|... 

TABLE2 (about 1500000 records) 
id|name|number1|number2 
1|ddd |100.121|12.32 
2|bbb |76.223 |11.45 
3|eee |55.23 |32.1 

我需要做到這一點:

  1. 爲TABLE1的每個記錄,發現如果有TABLE2的名稱相同的記錄;我需要將TABLE1(54.145,77.23)的「number1」和「number2」替換爲TABLE2(76.223,11.45)的值;如果是(例如「bbb」記錄),我需要用TABLE2(76.223,11.45)的值替換TABLE1(54.145,77.23)的「number1」和「number2」。
  2. 如果NO(例如「aaa」和「ccc」記錄)我需要向TABLE1(12.23,43.17和65.2345,13.234)的「number1」和「number2」添加一個隨機數。隨機數必須在0.01和0.30之間;

什麼是最好的和更快的方式來做到這一點?

我可以使用SQLITE編輯器嗎?哪一個?

+0

請編輯您的問題,並提供樣本數據和預期的結果。說明並不完全清楚。 –

+0

@GordonLinoff我添加了一個小例子。我希望這可以幫助你來幫助我。 – Martin

回答

0

可能的(未經測試)的方式來做到這一點:

UPDATE TABLE1 
SET 
     number1 = (SELECT COALESCE(MAX(TABLE2.number1), (CAST(ABS((RANDOM()%30)) AS INT)+1)/100) 
          FROM TABLE2 
          WHERE TABLE2.name = TABLE1.name), 
     number2 = (SELECT COALESCE(MAX(TABLE2.number2), (CAST(ABS((RANDOM()%30)) AS INT)+1)/100) 
          FROM TABLE2 
          WHERE TABLE2.name = TABLE1.name); 

查詢可以通過在兩個TABLE1TABLE2表創建的name列索引可以加快。

參考

sql: how to update table values from another table with the same user name? on SO

[sqlite] SQLite Random number generator on Google Groups

+0

這不會*添加*隨機數,而SQLite的[random](http://www.sqlite.org/lang_corefunc.html#random)不能以這種方式工作。 –

+0

@CL。感謝您的反饋!我現在糾正了語法。首先,將隨機數除以30.餘數的絕對值向下舍入到最接近的整數(0-29),加1(1-30),然後除以100(0.01-0.30)。 –

+0

@JosephB但是如果查找TABLE1記錄具有相同名稱的TABLE2,那麼您的查詢將添加隨機值,對嗎?如果是,我不需要它,請再讀一遍我的問題(我已經編輯了它,現在我認爲它更清楚)。 – Martin