Объединение двух таблиц в sqlite3 - PullRequest
5 голосов
/ 02 января 2012

У меня есть две таблицы в двух отдельных базах данных sqlite3.Типы данных идентичны, но схемы немного отличаются.Я хочу, чтобы они были одной таблицей в одной базе данных с той же схемой, что и Table 2

Таблица 1

CREATE TABLE temp_entries (
    id INTEGER PRIMARY KEY, 
    sensor NUMERIC, 
    temp NUMERIC, 
    date NUMERIC);

Таблица 2

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.Я хотел бы, чтобы id для записей в таблице 1 начинался с 0, а затем записи с table 2 начинались после последней записи из table 1.

В идеале я хотел бы просто добавитьввод значений от Table 1 до Table 2 и «переиндексация» первичного ключа, чтобы он был в том же порядке возрастания, что и «dateTime».

UPDATE Теперь у меня есть обе таблицы, использующие одну и ту же схему, я сделал это, создав новую таблицу с той же схемой, что и 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 для всех новых записей.Теперь я хочу объединить их, сохраняя идентификатор и дату в порядке возрастания.

Ответы [ 2 ]

3 голосов
/ 02 января 2012

Разобрался.

  • Открыть текущую базу данных.
  • Присоединить к исходной базе данных

    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;
    
0 голосов
/ 02 января 2012

Я предполагаю, что 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";

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...