首页 > 解决方案 > SQLite INSERT OR IGNORE 不会忽略重复项

问题描述

我正在编写一个 java 程序来组合两个具有相同架构的数据库。这是 SQLite 或我的查询的问题,而不是 Java 代码,因为我能够在 DB Browser 应用程序中准确地复制它。

我有 2 个数据库:一个正在合并,一个是目标。

我最初连接到要合并的数据库,然后将目标数据库附加为“dest”。我发出以下查询来复制数据:

INSERT or IGNORE into dest.AnalogInput SELECT * from AnalogInput where timestamp >= 1600824664131000000 AND timestamp <= 1600824664131000000

这工作正常并插入数据。如果我在相同的数据上再次运行它,它会在目标数据库中插入一个副本。我认为“OR IGNORE”的目的是为了防止重复?我的查询不正确还是我对 OR IGNORE 的理解不正确?

编辑:是的,我知道时间戳是相同的 - 这是一个通用查询,我只是在单个时间戳上使用几个样本进行测试。

谢谢!

标签: sqliteinsert

解决方案


INSERT OR IGNORE仅当表中存在唯一约束时才有效。
由于没有而且你不能添加任何东西,因为 SQLite 不是那么灵活,所以做你想做的事情的唯一方法是这样的:

INSERT or IGNORE INTO dest.AnalogInput 
SELECT * FROM AnalogInput WHERE ....
EXCEPT
SELECT * FROM dest.AnalogInput

推荐阅读