Я обычно использую 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

это не добавит новые строки.

Итак, как правильно это сделать? У меня ощущение, что я что-то упускаю очень-очень просто, и что я буду чувствовать себя очень-очень глупо, когда получу ответ :)

Ответы на вопрос(2)

Ваш ответ на вопрос