Cómo realizar un UPSERT para poder usar valores nuevos y antiguos en la parte de actualización

Estúpido pero simple ejemplo: supongamos que tengo una tabla 'Artículo' donde guardo los totales de los artículos que reciben.

Item_Name              Items_In_Stock

l nombre de @Item es la clave principal aquí. Cómo lograr lo siguiente cuando recibo el artículo A en cantidad X.

Si el artículo no existe, inserto un nuevo registro para el Artículo A y establezco los artículos en stock en X y si existe un registro donde los artículos en stock eran Y, entonces el nuevo valor en artículos en stock es (X + Y) @

INSERT INTO `item`
(`item_name`, items_in_stock)
VALUES( 'A', 27)
ON DUPLICATE KEY UPDATE
`new_items_count` = 27 + (SELECT items_in_stock where item_name = 'A' )

Mi problema es que tengo varias columnas en mi tabla real. ¿Es una buena idea escribir varias declaraciones select en la parte de actualización?

Por supuesto que puedo hacerlo en código, pero ¿hay una mejor manera?

Respuestas a la pregunta(5)

Su respuesta a la pregunta