Подскажите, как правильно реализовать мою идею в postgresql? Необходимо добавлять из одной таблицы в другую в соответствии с определенным условием
У меня есть две таблицы accounts и technical_base. В таблице accounts скрипт заполняется автоматически, но не все столбцы. Мне нужно взять данные из technical_base таблицы для заполнения.
Мои таблицы:
**Technical_base**
source model rated_energy general_tarif
info_1 s9 1300 5
info_1 a10 1200 5
info_2 s9 1300 3.5
info_2 a10 1200 3.5
**accounts**
source object redirect model number_of_cars rated_energy general_tariff personal_tariff personal_energy result_for_the_month date
info_1 info_object Client_1 s9 info Info info info info
info_2 info_object Client_2 s9 info info info info info
info_1 info_object Client_3 a10 info info info info info
info_2 info_object Cleint_4 a10 info info info info info
Какой результат хочу:
**accounts**
source object redirect model number_of_cars rated_energy general_tariff personal_tariff personal_energy result_for_the_month date
info_1 info_object Client_1 s9 info 1300 5 info info info info
info_2 info_object Client_2 s9 info 1300 3.5 info info info info
info_1 info_object Client_3 a10 info 1200 5 info info info info
info_2 info_object Cleint_4 a10 info 1200 3.5 info info info info
в результате мне нужен правильный запрос, чтобы он находил данные из технической таблицы и сравнивал их в таблице accounts и заполнил столбцы rated_energy и general_tarif так информация есть ток там.
что ун их общего у таблиц это sourcе и model, по ним он должен искать у technical_base и записывать accounts.
Я думал о вариантах с ключами, но я думаю, что это сложно...
Если нужны еще доп. инфа или код для создание таблиц то пишите скину.
Запрос на таблицы https://dbfiddle.uk/?rdbms=postgres_14&fiddle=92b67e79ece3bd86b5c579bec03639f9
Получаеться на такой запрос но он не правильный...
UPDATE accounts SET rated_energy = (SELECT rated_energy FROM technical_base WHERE technical_base.model = accounts.model and technical_base.source = accounts.source) AND
SET general_tariff = (SELECT general_tariff FROM technical_base WHERE technical_base.model = accounts.model and technical_base.source = accounts.source) WHERE EXISTS (SELECT rated_energy FROM technical_base WHERE technical_base.model = accounts.model and technical_base.source = accounts.source) AND SELECT general_tariff FROM technical_base
WHERE technical_base.model = accounts.model and technical_base.source = accounts.source);
Ответы (1 шт):
UPDATE accounts a -- обновляемая таблица
SET rated_energy = t.rated_energy, -- что и чем обновляем
general_tariff = t.general_tariff
FROM technical_base t -- откуда берём данные для обновления
WHERE a.source = t.source AND a.model = t.model -- устанавливаем соответствие
AND (a.rated_energy IS NULL OR a.general_tariff IS NULL); -- проверяем, надо ли обновлять
https://dbfiddle.uk/?rdbms=postgres_14&fiddle=066c158c05ef5c177e14041a62ab2bd3
Т.е. обновляем только записи, где есть хотя бы одно незаполненное поле.