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