SQL:如果不存在,如何更新或插入?

时间:2013-02-11 07:13:26

标签: sql sqlite

我下面有一个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

2 个答案:

答案 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)

请注意,您应该将这些字段组合用于唯一索引,以确定是否将两行视为相同且应替换而不是插入。

SQLFiddle Demo

请注意,如果您注释掉唯一索引创建,则为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');