Не в одном запросе, но вы можете сделать два запроса для нескольких строк.
В MySQL эквивалент (как вы уже знаете:)
INSERT INTO Table1 (...)
VALUES(...)
ON DUPLICATE KEY
UPDATE column=column+1
;
или
INSERT INTO Table1 (...)
( SELECT ...
FROM ...
)
ON DUPLICATE KEY
UPDATE column=column+1
;
Вторая форма может быть записана с двумя запросами как:
UPDATE Table1
SET (...)
WHERE Column1 = 'SomeValue'
;
INSERT INTO Table1 (...)
( SELECT ...
FROM ...
WHERE 'SomeValue' NOT IN ( SELECT Column1
FROM Table1 )
)
;
Вы также можете изменить порядок и сначала вставить новые строки, а затем обновить все строки, если это лучше соответствует вашим данным.
* Обратите внимание, что подзапросы IN
и NOT IN
могут быть преобразованы в эквивалентные формы JOIN
и LEFT JOIN with check for NOT NULL
.