Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅当行的时间戳较新时才替换SQLite/MySQL_Mysql_Sqlite - Fatal编程技术网

仅当行的时间戳较新时才替换SQLite/MySQL

仅当行的时间戳较新时才替换SQLite/MySQL,mysql,sqlite,Mysql,Sqlite,我正在使用同步引擎,遇到了一个问题: 我需要在一个查询中批量插入或替换多个项目,但前提是该项目的时间戳“lastModified”比数据库中的当前值新(如果该项目存在-如果该项目在数据库中尚不存在,则应插入该项目) 到目前为止,我想到的是: REPLACE INTO tableName (id, name, lastModified) VALUES CASE WHEN lastModified < [itemLastModified] THEN ([itemId], [itemName],

我正在使用同步引擎,遇到了一个问题:

我需要在一个查询中批量插入或替换多个项目,但前提是该项目的时间戳“lastModified”比数据库中的当前值新(如果该项目存在-如果该项目在数据库中尚不存在,则应插入该项目)

到目前为止,我想到的是:

REPLACE INTO tableName (id, name, lastModified) VALUES
CASE WHEN lastModified < [itemLastModified] THEN ([itemId], [itemName], [itemLastModified]), END
CASE WHEN lastModified < [itemLastModified] THEN ([itemId], [itemName], [itemLastModified]), END
CASE WHEN lastModified < [itemLastModified] THEN ([itemId], [itemName], [itemLastModified]) END
替换为tableName(id、name、lastModified)值
当lastModified<[itemLastModified]时,则([itemId]、[itemName]、[itemLastModified]),结束
当lastModified<[itemLastModified]时,则([itemId]、[itemName]、[itemLastModified]),结束
当lastModified<[itemLastModified]时,则([itemId]、[itemName]、[itemLastModified])结束
但这显然行不通,因为每个case语句都搜索表中的所有行,而不是集中于当前项。更进一步说,如果这个项目还不存在,我想什么也不会发生


有人知道解决这个问题的好方法吗?

将新数据放入临时表中。然后做:

REPLACE INTO tableName (id, name, lastModified)
SELECT t1.id, t1.name, t1.lastModified
FROM tempTable t1
LEFT JOIN tableName t2 ON t1.id = t2.id AND t1.lastModified > t2.lastModified

SELECT
查询将返回临时表中具有较新修改时间或原始表中没有匹配行的所有行。

添加一个包含空值的where子句,以确保在行不存在时发生插入。我想这不会解决仅在当前列存在时更新的问题lastModified比更新项的值旧…感谢您回答Barmar,我将尝试这种方法。。。我必须马上放下桌子,对吗?ThanksI不知道SQLite,但是MySQL临时表会在您关闭连接时自动删除。