我在两个独立的sqlite3数据库中有两个表。数据类型相同,但模式略有不同。我希望它们是单个数据库中的单个表,具有与Table 2
CREATE TABLE temp_entries (
id INTEGER PRIMARY KEY,
sensor NUMERIC,
temp NUMERIC,
date NUMERIC);
CREATE TABLE "restInterface_temp_entry" (
"id" integer NOT NULL PRIMARY KEY,
"dateTime" integer NOT NULL,
"sensor" integer NOT NULL,
"temp" integer NOT NULL
);
id
在两个表之间不是唯一的。我想创建另一个与Table 2
具有相同模式的表。我希望表1中条目的id
从0开始,然后table 2
中的条目从table 1
的最后一个条目开始。
理想情况下,我只想将Table 1
中的条目添加到Table 2
并“重新索引”主键,使其与“dateTime”的升序顺序相同。
更新 :我现在让两个表都使用相同的模式,我通过在数据库中创建一个与Table 2
具有相同模式的新表来完成此操作持有Table 1
。我将数据复制到新表中,例如:
INSERT INTO restInterface_temp_entry(id,dateTime,sensor,temp)
...> select id,date,sensor,temp FROM temp_entries;
我曾经将一堆temp_entries
记录到csv文件中。我想将数据放入一种更易于使用的格式并选择sqlite3。我编写了一个程序,将所有条目拉出并将它们放入Table 1
。我当时不确定我在做什么,并使用Table 2
表示所有新条目。现在我想将它们全部组合起来,希望按升序保持id和日期。
答案 0 :(得分:3)
想出来。
附加到原始数据库
ATTACH '/orig/db/location' as orig
将记录从当前数据库移动到旧数据库,省略PK
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;
答案 1 :(得分:-1)
我假设SQLLite支持INSERT INTO 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";
这应该可以解决问题。