Глупый, но простой пример: Предположим, у меня есть таблица «Предмет», в которой я храню итоги полученных предметов.
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' )
Моя проблема в том, что у меня есть несколько столбцов в моей реальной таблице. Это хорошая идея написать несколько операторов выбора в части обновления?
Конечно, я могу сделать это в коде, но есть ли способ лучше?
Пример для upsert
INSERT INTO table1 (col1, col2, col3)
VALUES ($1, $2, $3)
ON CONFLICT (col1)
DO
UPDATE
SET col2 = $2, col3 = $3
WHERE col1 = $1
RETURNING col1