Diesel: обновление строк таблицы из соответсвующих элементов массива

Есть таблица, например

CREATE TABLE item (
  id INTEGER PRIMARY KEY NOT NULL,
  category SMALLINT,
  title VARCHAR(255),
  size DOUBLE,
  reg_time DATETIME,
  status SMALLINT
);

Есть два запроса к API:
первый возвращает все item из запрашиваемой категории с полями reg_time, status
HashMap<i32, (NaiveDateTime, i16)>

второй возвращает для запрашиваемых item все поля таблицы
HashMap<i32, ItemData>

В таблице есть данные, нужно обновить в ней информацию, обрабатывая по очереди выбранные категории.

После запроса к категории нужно сравнить reg_time каждой записи, если он совпадает, то обновить status.
Для тех, у кого reg_time не совпадает, нужно собрать id и сделать запрос с помощью второго метода и результат записать в таблицу.

Как это лучше сделать? Методы в diesel ничего интересного не предлагают.

На данный момент я придумал три варианта, но не один из них мне не нравится

  1. Обработать каждый элемент отдельным запросом к базе, топорно, просто и скорее всего не эффективно.
  2. Используя sql_query попробовать написать запрос, где VALUES будут данными из массива
WITH tmp_table(id, reg_time, status) AS (VALUES (5593198, 1532781854, 1), (5595053, 1533145448, 0), (5596787, 1534590934, 1))
UPDATE item SET
status = (SELECT status FROM tmp_table WHERE item.id = tmp_table.id)
WHERE id IN (SELECT id FROM tmp_table WHERE tmp_table.reg_time = item.reg_time);
  1. Сделать NewType, который будет создавать мне временную таблицу, в которую я смогу делать INSERT массива, а по выходу дропать её