6

我在下面有一个 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+"');");

例如:

如果以下在数据库中,并且 John 想要更新他的时间,它将检查名称、日期、工作是否与尝试插入的值相同,并且它们是否仅更新 HOURS。否则,如果它们都不存在一起(John 可能有几个小时记录在另一个 DATE 或 JOB 上)插入一个新行。

此外,其他人还将在同一个数据库中记录他们的时间和不同的角色,如下所示。

约翰 | 2012 年 12 月 12 日 | 清洁剂 | 20 约翰 | 2012 年 12 月 12 日 | 首席执行官 | 10 吉姆 | 2011 年 12 月 10 日 | 清洁剂 | 5

4

2 回答 2

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 演示

请注意,如果您注释掉唯一索引的创建,它将停止正常工作

于 2013-02-11T07:20:37.293 回答
2

我认为这之前已经在这里问过 sqlite:

如果不存在则插入其他更新?

似乎他们有这样的语法:

INSERT OR REPLACE INTO TABLE (NAME, DATE, JOB, HOURS) VALUES ('BOB', '12/01/01', 'PM','30');
于 2013-02-11T07:18:12.297 回答