2015-03-02 59 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