2015-03-02 84 views
1

我需要一種方法來插入一個值,如果該值不存在,如果它這樣做,它應該增加另一個變量的值。SQLite插入,如果不存在其他增加整數值

這是我的表如下所示:

CREATE TABLE IF NOT EXISTS table(
     Id INTEGER PRIMARY KEY, 
     Date TEXT, 
     Quantity INTEGER 

每當我一個日期添加到數據庫,與我希望它的量添加到表中的「量」的量。所以每個「日期」只會分配1個「數量」。

只是一個小例子:

INSERT INTO Table (Date, Quantity) VALUES('%s', Quantity+%s)) % ('12/5/2013', 20); 

如果已經有一個看起來像記錄('12 /二千○十三分之五' ,5) 這將是('12 /二千○十三分之五' ,25 )代替。

我發現1非常類似的問題,但我不明白,我怎麼也使整數增加.. Another Question

+0

你能指定你不明白你鏈接到的答案嗎? '替換或插入'聽起來非常自我的explenary。 'coalesce'對我來說是新的,但根據文檔,它會返回傳入的第一個非null參數。因此,如果select返回null(因爲沒有給定日期的記錄),則第二個參數將用作後備。在你的情況下,你只是不想'合併(SELECT val + 1 ...,1)',但是像'coalesce(SELECT quantity + quantity ...,quantitty)'https://www.sqlite.org/lang_corefunc.html – yoshi 2015-03-02 18:07:00

回答

3

如果你想爲每個日期只有一列,那麼你應該將它聲明作爲UNIQUE,甚至作爲表的主鍵。

如果你這樣做,那麼你可以聲明數量列INTEGER NOT NULL DEFAULT 0。您的表將被定義爲:

CREATE TABLE IF NOT EXISTS table (
    Date TEXT PRIMARY KEY, 
    Quantity INTEGER NOT NULL DEFAULT 0 
); 

然後,當您要添加到特定日期,你運行:

# assuming 'db' is your sqlite3 database 
date_to_insert = '12/5/2013' 
amount_to_add = 20 
db.execute('INSERT OR IGNORE INTO table(Date) VALUES(?)', (date_to_insert,)) 
db.execute('UPDATE table SET Quantity = Quantity + ? WHERE Date = ?', (amount_to_add, date_to_insert)) 
+0

令人敬畏的作品,我宣佈日期爲獨特和Id爲主要。奇蹟般有效。 – RasmusGP 2015-03-03 21:01:07