Моя база данных - SQLite, но я уверен, что вопрос относится к SQL в целом.Скажем, у меня есть таблица «Students» со столбцами «id» (первичный ключ), «name», «selected».Время от времени мне нужно обновлять указанную таблицу из внешнего источника, но я получаю только таблицу идентификаторов и имен.Когда указанное обновление происходит для каждой строки, мне нужно:
Если нет строки с таким же идентификатором, добавить новую строку в таблицу со значением по умолчанию для «selected»
Если строка уже существует, обновите только поле «name», отменив «selected»
Это должно быть выполнено в пакете с одним запросом с заполнителями.Кроме того, случай упрощен, на самом деле мне нужно написать универсальный код для обновления набора таблиц, каждая из которых содержит несколько полей для обновления и несколько «локальных» полей.
К сожалению, я не могу найти подходящий способвыразить свое желание SQLite.Если я использую запрос REPLACE:
INSERT OR REPLACE INTO students (id, name) VALUES (:id, :name)
, это очистит поле «выбранное», а если я использую UPDATE:
UPDATE students SET name = :name WHERE id = :id
, это не добавит новые строки.
Итак, как правильно это сделать?У меня такое чувство, что я упускаю что-то очень-очень простое, и что я буду чувствовать себя очень-очень глупо, когда получу ответ:)