我下面有一个SQL插件,工作正常,但是我想检查DATE = xxxx,NAME = xxxx和JOB = xxx,如果存在则更新HOURS,否则插入新行。这可能是SQL吗?
"INSERT INTO TABLE (NAME, DATE, JOB, HOURS) VALUES ('BOB', '12/01/01', 'PM','30');
使用相同的结果尝试以下OR REPLACE,每次都会添加一个新行。
add_time = conn.prepareStatement("INSERT OR REPLACE INTO RESOURCE (NAME, DATE, JOB, HOURS) VALUES ('"+name+"', '" + date + "', '"+job+"','"+hours+"');");
例如:
如果以下是在DB中,并且John想要更新他的小时数,那么它将检查名称,日期,作业是否与尝试插入的值相同,以及它们是否仅仅是更新HOURS。否则,如果它们中没有一个存在(约翰可能有几个小时记录另一个DATE或JOB)插入一个新行。
其他人也会在下面的同一个数据库中记录他们的小时和不同的角色。
约翰| 12/12/2012 |清洁剂| 20 约翰| 12/12/2012 |首席执行官10 吉姆| 12/10/2011 |清洁剂| 5
答案 0 :(得分:9)
您可以像这样使用REPLACE INTO
:
REPLACE INTO mytable (NAME, DATE, JOB, HOURS)
VALUES ('BOB', '12/01/01', 'PM','30')
但是,您必须为此创建唯一索引:
CREATE UNIQUE INDEX myindex
ON mytable(NAME, DATE, JOB)
请注意,您应该将这些字段组合用于唯一索引,以确定是否将两行视为相同且应替换而不是插入。
请注意,如果您注释掉唯一索引创建,则为stops working correctly。
答案 1 :(得分:2)
我认为之前有人问过sqlite:
INSERT IF NOT EXISTS ELSE UPDATE?
似乎他们有这样的语法:
INSERT OR REPLACE INTO TABLE (NAME, DATE, JOB, HOURS) VALUES ('BOB', '12/01/01', 'PM','30');