我正在开发一个同步引擎,但遇到了一个问题:

我需要在一个查询 中对 批量插入或替换 多个项目,但前提是项目的时间戳“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

但这显然不起作用,因为每个 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 查询将返回临时表中修改时间较新或原始表中没有匹配行的所有行。

关于mysql - 仅当行的时间戳较新时才替换 SQLite/MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25012598/

10-12 05:00