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列にテキストが追加されることを除いて、すべて正常に機能するため、2 回実行すると次のようになります。'CustomerPrice'

顧客価格,顧客価格

ステートメントで実行したいのは'CustomerPrice'ProductOverrides列に追加することですが、その文字列がまだそこに存在しない場合に限ります。そのため、このステートメントを何回実行しても、その文字列は 1 回しか含まれません。それを達成するためにこのステートメントを変更するにはどうすればよいですか?

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 に答える