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

标签 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+"');");

例如:

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

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

约翰 | 2012 年 12 月 12 日 |清洁工 | 20 约翰 | 2012 年 12 月 12 日 |总裁 | 10 吉姆 | 2011 年 12 月 10 日 |清洁工 | 5

最佳答案

您可以像这样使用 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 .

关于SQL:如果不存在如何更新或插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14807472/

相关文章:

mysql - 向查询添加 +1 以解决 "division by zero"错误

PHP/MySQL 查询 : Show results based on 2 conflicting conditions

MySql查询语法错误DATE_SUB

sql - 与联合所有SQL查询获取错误 'Column specified multiple times'

python - 从脚本填充数据库时出现 Django Heroku DataError

与 SQlite 一起使用的 Delphi 组件

java - SQLite 和 tomcat 中的并发访问

sql - 聚合函数中的子句

c - 是否可以将回调函数与 sqlite prepare v2() 结合使用

android - 我应该总是在 android sqlite 中使用事务吗?