Копирование данных из одной таблицы sqlite в другую - PullRequest
0 голосов
/ 04 апреля 2020

(SQlite noob здесь!)

Это, кажется, общий вопрос, но ни одно из решений, которые я видел, не является тем, что я ищу. Приведенный ниже пример является надуманным примером проблемы, с которой я столкнулся.

Вот краткое изложение проблемы:

Дано: две таблицы с различной структурой. Одна таблица состоит из столбцов со списком городов, населением города и данными о населении. Столбец населения этой таблицы начинается со всех «0». Вторая таблица состоит из столбцов, содержащих города и население этого города для НЕКОТОРЫХ городов. Я хочу вставить данные из столбца заполнения второй таблицы в столбец заполнения первой таблицы.

Например:

Таблица городов:

CREATE TABLE [cities] (
    [City] TEXT,
    [Population] INT,
    [U10] REAL,
    [U20] REAL,
    [U30] REAL,
    [U40] REAL,
    [U50] REAL,
    [U60] REAL,
    [U70] REAL,
    [U80] REAL,
    [U90] REAL,
    [O90] REAL
);

Таблица населения:

CREATE TABLE [pop] (
   [City] TEXT,
   [Population] INT
};

Я пробовал много вариантов

UPDATE cities SET Population = (SELECT Population FROM pop) WHERE City = (SELECT City FROM pop);

, но безуспешно. Иногда я обновляю одну запись (с неправильным значением). В других случаях я получаю все значения популяции одинаковыми. Конечно, я упускаю из виду нечто очевидное.

Любая помощь?

1 Ответ

0 голосов
/ 04 апреля 2020

Предложение WHERE должно быть в подзапросе.

UPDATE cities
       SET population = (SELECT pop.population
                                FROM pop
                                WHERE pop.city = cities.city);

Если вы хотите обновить только города, для которых существует строка в pop, дополнительно добавьте предложение WHERE с помощью EXISTS и коррелированный подзапрос к внешнему утверждению. Без такого условия WHERE население городов, не существующих в pop, устанавливается на NULL, возможно, перезаписывая существующие значения не NULL.

UPDATE cities
       SET population = (SELECT pop.population
                                FROM pop
                                WHERE pop.city = cities.city)
       WHERE EXISTS (SELECT *
                            FROM pop
                            WHERE pop.city = cities.city);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...