У меня есть основная таблица, которую я использую в своем приложении t_media. Набор данных из внешнего источника, который обновляется каждый день. Я загружаю набор данных во временную таблицу t_media_temp каждый день. Мне нужно сделать три вещи:
объединить запросы INSERT/DELETE/UPDATE в один
- вставить запись из t_media_temp в t_media, если он уже не существует
- обновить запись в t_media если дата отличается t_media_temp
- Удалить запись из t_media, если его нет в t_media_temp
В текущей ситуации я использую 3 запроса ниже, но есть ли простой способ объединить его в один запрос?
/* Insert */
INSERT INTO t_media (`col_1`, `col_2`, `col_3`, `col_x`)
SELECT (`col_1`, `col_2`, `col_3`, `col_x`)
FROM t_media_temp AS t1
WHERE NOT EXISTS (
SELECT * FROM t_media AS t2
WHERE t1.col_1 = t2.col_1
)
/* Update */
UPDATE t_media, t_media_temp SET
t_media.col_1 = t_media_temp.col_1,
t_media.col_2 = t_media_temp.col_2,
t_media.col_3 = t_media_temp.col_3,
t_media.col_x = t_media_temp.col_x
WHERE
t_media.col_1 = t_media_temp.col_1
AND
t_media.col_2 != t_media_temp.col_2
/* Delete */
DELETE FROM t_media WHERE col_1 NOT IN (SELECT col_1 FROM t_media_temp)
col_1 всегда уникальное значение в таблице.
почему логика вокруг 't_media. col_2! = t_media_temp.col_2' отсутствует в запросе на вставку? – M0rtiis