使用具有重复键更新的条件

时间:2015-12-23 17:16:43

标签: mysql

我正在编写一个更新当前记录的SQL语句。我遇到的问题是,如果其中一列具有特定值,那么我不希望该值被覆盖。如果表中status列的值等于Received,我不希望它被覆盖。 这是我的示例代码:

INSERT INTO transfer_order (invoice_id, contact_id, ship_date, ship_info, tracking_number, date_created, date_modified, account_number, shipping, discount, status) 
VALUES ('$invoice_id', $contact_id, $ship_date, $shipper_id, $tracking_number , $date_created, $date_modified, $account_name, $shipping_cost, $discount, $status) ON DUPLICATE KEY UPDATE contact_id=VALUES(contact_id),
ship_date=VALUES(ship_date), tracking_number=VALUES(tracking_number), 
ship_info=VALUES(ship_info), date_created=VALUES(date_created), 
date_modified=VALUES(date_modified),shipping=VALUES(shipping),status=VALUES(status)

1 个答案:

答案 0 :(得分:0)

你的意思是这样吗?

INSERT INTO transfer_order 
(invoice_id, contact_id, ship_date, ship_info, tracking_number, date_created, date_modified, account_number, shipping, discount, status) 
VALUES ON DUPLICATE KEY UPDATE 
contact_id = CASE status 
                WHEN 'Received' THEN VALUES(contact_id)
             END , 
ship_date = CASE status
                WHEN 'Received' THEN VALUES(ship_date)
            END, 
tracking_number = VALUES(tracking_number), 
ship_info = VALUES(ship_info), 
date_created = VALUES(date_created), 
date_modified = VALUES(date_modified), 
shipping = VALUES(shipping),
status = VALUES(status)