Как выполнить UPSERT, чтобы я мог использовать как новые, так и старые значения в части обновления

Глупый, но простой пример: Предположим, у меня есть таблица «Предмет», в которой я храню итоги полученных предметов.

Item_Name              Items_In_Stock

Имя предмета является здесь первичным ключом. Как достичь следующего, когда я получаю товар A в количестве X.

Если товар не существует, я вставляю новый, записанный для товара A, и устанавливаю для товаров на складе значение X, и если существует запись, где товары в наличии было Y, тогда новое значение в товарах на складе (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' )

Моя проблема в том, что у меня есть несколько столбцов в моей реальной таблице. Это хорошая идея написать несколько операторов выбора в части обновления?

Конечно, я могу сделать это в коде, но есть ли способ лучше?

64
задан WPFAbsoluteNewBie 24 May 2011 в 08:36
поделиться