Участник курса спрашивает:
Есть таблица, хочу ежедневно загружать в неё обновления из csv. Если по id запись уникальная — добавлять, а если запись существует — обновлять поля, которые отличаются, кроме id. Это можно как-то из коробки?
Да! Такой подход (добавить или обновить по необходимости) в мире SQL называется «upsert». В SQLite он реализуется через инструкцию
on conflict.Допустим, мы хотим добавить/обновить записи в таблице stats. Тогда запрос будет примерно такой:
insert into stats(id, last_updated, usage)
select ... from ...
on conflict(id) do update
set
last_updated = excluded.last_updated,
usage = usage + excluded.usage;excluded — это та запись, которую мы пытаемся вставить (и она вызвала конфликт по id).
Что особенно приятно, такой же синтаксис сработает и в PostgreSQL (SQLite позаимствовал фичу у него).
P.S. Присоединяйтесь к чату «SQL на практике»! https://t.me/sqliter_chat