Fügen Sie zuerst einen UNIQUE
hinzu Beschränkung auf Name, Strichcode, Artikel, Standort und Preis.
ALTER TABLE tableX
ADD CONSTRAINT tableX_UQ
UNIQUE (name, barcode, item, location, price) ;
Dann können Sie INSERT INTO ... ON DUPLICATE KEY UPDATE
verwenden :
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
könnte auch verwendet werden, aber es gibt Unterschiede im Verhalten (was besonders wichtig ist, wenn Sie Fremdschlüssel haben). Einzelheiten finden Sie in dieser Frage „INSERT IGNORE ” vs „EINFÜGEN … BEI UPDATE DES DUPLIKATEN SCHLÜSSELS“
und die Antwort von @Bill Kawin, in der die Unterschiede zwischen INSERT IGNORE
erörtert werden , INSERT ... ON DUPLICATE KEY
und REPLACE
.