まず、UNIQUE
を追加します 名前、バーコード、アイテム、場所、価格に関する制約。
ALTER TABLE tableX
ADD CONSTRAINT tableX_UQ
UNIQUE (name, barcode, item, location, price) ;
次に、INSERT INTO ... ON DUPLICATE KEY UPDATE
を使用できます。 :
INSERT INTO tableX
(name, barcode, item, location, price, quantity, date)
VALUES
(?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
quantity = CASE WHEN VALUES(date) > date
THEN quantity + VALUES(quantity) -- add quantity
ELSE quantity -- or leave as it is
END
, date = CASE WHEN VALUES(date) > date
THEN VALUES(date) ; -- set date to new date
ELSE date -- or leave as it is
END
REPLACE
使用することもできますが、動作に違いがあります(特に外部キーがある場合は重要です)。詳細については、この質問を参照してください「INSERTIGNORE 」と「INSERT…ONDUPLICATEKEYUPDATE」
INSERT IGNORE
の違いについて説明している@BillKawinによる回答 、 INSERT ... ON DUPLICATE KEY
およびREPLACE
。