在sqlite3中合并两个表

在sqlite3中合并两个表,sql,database,sqlite,Sql,Database,Sqlite,我在两个单独的sqlite3数据库中有两个表。数据类型相同,但模式略有不同。我希望它们是单个数据库中的单个表,具有与表2相同的模式 表1 表2 id在这两个表之间不是唯一的。我想用与表2相同的模式创建另一个表。我希望表1中的条目的id从0开始,然后表2中的条目从表1中的最后一个条目开始 理想情况下,我只想将表1中的条目添加到表2中,并对主键进行“重新索引”,使其与“dateTime”的升序相同 更新:我现在拥有两个使用相同模式的表,我是通过在包含表1的数据库中创建一个与表2具有相同模式的新表来实

我在两个单独的sqlite3数据库中有两个表。数据类型相同,但模式略有不同。我希望它们是单个数据库中的单个表,具有与表2相同的模式

表1 表2
id
在这两个表之间不是唯一的。我想用与
表2
相同的模式创建另一个表。我希望表1中的条目的
id
从0开始,然后
表2中的条目从
表1中的最后一个条目开始

理想情况下,我只想将
表1
中的条目添加到
表2
中,并对主键进行“重新索引”,使其与“dateTime”的升序相同

更新:我现在拥有两个使用相同模式的表,我是通过在包含
表1
的数据库中创建一个与
表2
具有相同模式的新表来实现的。然后,我将数据复制到新表中,如下所示:

INSERT INTO restInterface_temp_entry(id,dateTime,sensor,temp)
   ...> select id,date,sensor,temp FROM temp_entries;
背景
我曾经将一堆
temp_条目
记录到csv文件中。我想将数据转换成更易于使用的格式,并选择了sqlite3。我编写了一个程序,将所有条目都提取出来并放入
表1
。当时我不确定自己在做什么,所以使用了
表2
作为所有新条目。现在我想把它们结合起来,希望能保持id和日期的升序

我假设SQLLite支持插入SELECT

INSERT INTO newtable (id, datetime, sensor, temp) 
    SELECT id, date, sensor, temp 
    FROM temp_entries
    ORDER BY id;
INSERT INTO newtable (id, datetime, sensor, temp) 
    SELECT "id", "dateTime", "sensor", "temp"
    FROM "restInterface_temp_entry"
    ORDER BY "id";
这应该可以解决问题。

解决了

  • 打开当前数据库。
  • 附加到原始数据库

    ATTACH '/orig/db/location' as orig
    
  • 将记录从当前数据库移动到旧数据库,省去主键

    insert into orig.restInterface_temp_entry(dateTime,sensor,temp)
    ...> select dateTime,sensor,temp from main.restInterface_temp_entry;
    
  • 清除当前数据库表

    delete from main.restInterface_temp_entry where id > 0
    
  • 将所有更新的记录从原始数据库表复制回当前数据库。

    insert into main.restInterface_temp_entry(id,dateTime,sensor,temp)
    ...> select id,dateTime,sensor,temp
    ...> from orig.restInterface_temp_entry;
    

那么,你的问题是什么?为什么你不能用你最喜欢的语言编写一个程序来实现这一点呢?我可以做到,但我希望有一种方法可以合并到sqlite3中的表中。我的问题归结为:当主键在两个sqlite表之间不唯一时,如何从一个sqlite表中获取数据并将其与另一个sqlite表中的数据相结合。
delete from main.restInterface_temp_entry where id > 0
insert into main.restInterface_temp_entry(id,dateTime,sensor,temp)
...> select id,dateTime,sensor,temp
...> from orig.restInterface_temp_entry;