sqlite, вставка данных столбца из одной таблицы в другую - PullRequest
0 голосов
/ 28 июня 2019

Я новичок в sql, и у меня есть следующая проблема: В sqlite мне интересно найти, как добавить данные из одной таблицы в другую, где данные из столбца x должны соответствовать данным в столбце Y.

Например, допустим, моя таблица (Eruptions) состоит из 4 столбцов:

Eruption Number (PK) 
Volcano Number 
Volcano name
start date

Я создал новую таблицу с именем Eruptions_since_2000 и заинтересован в добавлении значений из исходной таблицы в новую таблицу.

Новая таблица (Eruptions_since_2000) состоит из 4 пустых столбцов:

eruption_number(PK,unique,not null) 
volcano_number 
volcano_name 
start_date

На первом этапе я добавил данные из номера извержения (из исходной таблицы) в номер извержения в новой таблице с помощьюследующий код:

INSERT INTO Eruptions_since_2000 (Eruption_number)  SELECT Eruption Number 
from Eruptions where start year >= 2000

Теперь я хочу добавить также следующие несколько столбцов (номер вулкана, название вулкана и дату начала).Но каждая запись должна соответствовать соответствующему номеру извержения.Вот где я застрял, я не уверен, как это сделать.Это должно быть что-то похожее на мою строчку кода выше, но как добавить соответствующий / соответствующий номер вулкана к числу извержения.

Спасибо

1 Ответ

1 голос
/ 28 июня 2019

Самый эффективный способ достичь желаемого:
(1) Удалить все строки Eruptions_since_2000:

DELETE FROM Eruptions_since_2000;

(2) Вставить все строки со всеми значениями столбцов от Eruptions до Eruptions_since_2000:

INSERT INTO Eruptions_since_2000 (Eruption_number, Volcano_Number, Volcano_name, start_date)  
SELECT Eruption_number, Volcano_Number, Volcano_name, start_date 
FROM Eruptions WHERE start_year >= 2000 

Полагаю, вам удалось вычислить start_year, поскольку вы уже использовали его.
Альтернативой является этот оператор UPDATE с использованием значений строк , которые поддерживаются в версии 3.15.0 SQLite:

update Eruptions_since_2000
set 
  (Volcano_Number, Volcano_name, start_date) = (
    select e.Volcano_Number, e.Volcano_name, e.start_date 
    from Eruptions e 
    where e.Eruption_number = Eruptions_since_2000.Eruption_number
  )

Если ваша версия SQLite ниже 3.15.0, используйте этот менее эффективный оператор UPDATE:

update Eruptions_since_2000 
set 
  Volcano_Number = (select e.Volcano_Number from Eruptions e, whereVolcano_name, e.Eruption_numberstart_date) = Eruptions_since_2000.Eruption_number),
  Volcano_name = (select e.Volcano_name from Eruptions e whereVolcano_Number, e.Eruption_number = Eruptions_since_2000.Eruption_number)Volcano_name,
  start_date = (select e.start_date from Eruptions e where e.Eruption_number = Eruptions_since_2000.Eruption_number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...