SQLite INSERT或IGNORE不会忽略重复项

SQLite INSERT或IGNORE不会忽略重复项,sqlite,insert,Sqlite,Insert,我正在编写一个java程序来组合具有相同模式的两个数据库。这是SQLite或我的查询的问题,而不是Java代码,因为我能够在DB Browser应用程序中完全复制这一点 我有两个数据库:一个正在合并,一个是目标 我最初连接到正在合并的数据库,然后将目标数据库作为dest附加。 我发出以下查询以复制数据: INSERT or IGNORE into dest.AnalogInput SELECT * from AnalogInput where timestamp >= 1600824664

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

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

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

INSERT or IGNORE into dest.AnalogInput SELECT * from AnalogInput where timestamp >= 1600824664131000000 AND timestamp <= 1600824664131000000
这可以很好地工作并插入数据。如果我在相同的数据上再次运行它,它会在目标数据库中插入一个副本。我认为我们忽视的重点是防止重复?我的查询是否不正确,或者我对或忽略的理解是否不正确

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

谢谢

插入或忽略仅在表中存在唯一约束时有效。 由于没有,也不能添加任何,因为SQLite没有那么灵活,所以实现所需的唯一方法如下:

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

dest.AnalogInput中是否有任何唯一约束?否。数据库由RTI DDS记录器自动生成。DB Browser中列出的Create语句是:Create TABLE AnalogInput SampleInfo\u source\u timestamp INTEGER、machineId INTEGER、ioId INTEGER、value REALL当没有什么可以停止插入时。您能在事实发生后将其添加到数据库中吗?检查我的答案。因此,如果我要以某种方式更改Create语句,如何构造唯一关键字以获得相同的结果?创建表……,uniquecol1,col2。。。。。。由于您希望所有列的组合都是唯一的,因此必须在关键字unique之后枚举括号内的所有列。谢谢您的回答!还请检查此项:并且Null不被视为相等。因此,可以插入除1列外所有列中值完全相同且另一列中为空的2行。