Я пытаюсь превратить следующий запрос на обновление (Q1) в запрос вставки, например, (Q2):
Q1: UPDATE a
join b on a.b_id = b.id
SET a.col1 = some_value,
a.col2 = some_value,
a.col3 = some_value
where a.col4 = some_value
and a.col5 = some_value
and b.flag = 1
Q2: INSERT INTO `a` (id, col1, col2, col3) <---HERE I AM NOT ABLE TO FIGURE OUT HOW TO PASS ID AND ACCOMMODATE JOIN
VALUES
(id1, val11, val12, val13),
(id2, val21, val22, val23)
ON DUPLICATE KEY
UPDATE col1 = VALUES(col1),
col2 = VALUES(col2),
col3 = VALUES(col3)
WHERE a.col4 = some_value and
a.col5 = some_value and
b.flag = 1
Здесь Q2
не правильно. Я не могу понять, как обрабатывать объединение идентификатора с предложением where.
На самом деле я пытаюсь преобразовать запрос на обновление в запрос на вставку в моей кодовой базе python 3.6, чтобы я мог использовать executemany()
API драйвера pymysql
, который позволит мне запускать один и тот же запрос с партией параметров несколько раз. Тем самым я могу сократить время БД.
РЕДАКТИРОВАТЬ :
Я думал об эквивалентном запросе INSERT следующим образом (не уверен в его правильности):
INSERT INTO `a` (id, col1, col2, col3)
VALUES
(SELECT b.id, %s, %s, %s from
a join b on a.b_id= b.id
where a.col4= %s
and a.col5=%s
and b.flag=1)
ON DUPLICATE KEY
UPDATE col1 = VALUES(col1),
col2 = VALUES(col2),
col3 = VALUES(col3)