0

我正在尝试使用这条语句更新多条记录(大约一千条)(这是一个每晚都会运行的过程)。为简单起见,以下声明仅包括 3 种产品:

INSERT INTO productinventory
  (ProductID, VendorID, CustomerPrice, ProductOverrides)
VALUES
  (123, 3, 100.00, 'CustomerPrice'),
  (124, 3, 100.00, 'CustomerPrice'),
  (125, 3, 100.00, 'CustomerPrice')
ON DUPLICATE KEY UPDATE
  CustomerPrice = VALUES(CustomerPrice),
  ProductOverrides = CONCAT_WS(',', ProductOverrides, 'CustomerPrice')
;

一切正常,除了该ProductOverrides列每次运行该语句时都会添加文本'CustomerPrice',因此在运行两次后它最终看起来像这样:

客户价格,客户价格

我希望该语句做的是添加'CustomerPrice'ProductOverrides列中,但前提是该字符串尚不存在。因此,无论我运行该语句多少次,它都只包含该字符串一次。如何修改此语句以实现此目的?

4

1 回答 1

0

你可以做这样的事情

INSERT INTO productinventory (ProductID, VendorID, CustomerPrice, ProductOverrides) 
VALUES 
(123, 3, 100.00, 'CustomerPrice'), 
(124, 3, 100.00, 'CustomerPrice'), 
(125, 3, 100.00, 'CustomerPrice') 
ON DUPLICATE KEY UPDATE 
  CustomerPrice = VALUES(CustomerPrice), 
  ProductOverrides = IF(FIND_IN_SET(VALUES(ProductOverrides), ProductOverrides) > 0, 
                        ProductOverrides, 
                        CONCAT_WS(',', ProductOverrides, VALUES(ProductOverrides)));

这是SQLFiddle演示

于 2013-09-28T15:45:55.813 回答