Я обычно использую LEFT JOIN для INSERT и DELETE и JOIN для обновлений. Обратите внимание, что это происходит как один большой запрос, а не запись по базе записей:
аза данных 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
это не добавит новые строки.
Итак, как правильно это сделать? У меня ощущение, что я что-то упускаю очень-очень просто, и что я буду чувствовать себя очень-очень глупо, когда получу ответ :)