如何解决SQLite INSERT或IGNORE不会忽略重复项
我正在编写一个Java程序来合并具有相同架构的两个数据库。这是SQLite或我的查询的问题,而不是Java代码,因为我能够在数据库浏览器应用程序中精确地复制它。
我有2个数据库:1个正在合并,1个是目的地。
我最初连接到要合并的数据库,然后将目标数据库附加为“目标”。 我发出以下查询以复制数据:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。