sqlite - 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 的理解不正确?
编辑:是的,我知道时间戳是相同的 - 这是一个通用查询,我只是在单个时间戳上使用几个样本进行测试。
谢谢!
解决方案
INSERT OR IGNORE
仅当表中存在唯一约束时才有效。
由于没有而且你不能添加任何东西,因为 SQLite 不是那么灵活,所以做你想做的事情的唯一方法是这样的:
INSERT or IGNORE INTO dest.AnalogInput
SELECT * FROM AnalogInput WHERE ....
EXCEPT
SELECT * FROM dest.AnalogInput
推荐阅读
- amazon-dynamodb - 将对象数组插入 DynamoDB
- javascript - Javascript - 子数组总和等于 K
- python - Python For循环不同的语法
- javascript - 如何从 pug mixin 中的对象解构嵌套道具?
- python - >= 运算符在此 return 语句中的含义是什么?
- python - 将新行附加到熊猫数据框的最快方法
- swift - Xcode 仪器中的泄漏仪器是否准确?
- mysql - 是否可以从选择查询创建一个临时表并同时添加一组额外的列?
- gradle - 有没有办法强制 gradle 只使用 https 连接?
- python - Python/Jupyter MemoryError:无法分配具有形状的数组