2011-08-08 68 views
7

我使用ON DUPLICATE KEY UPDATE函數更新/插入單個表中的值。到目前爲止,一切都很好。與WHERE條件的重複密鑰更新

INSERT INTO table1 SET field1=aa, field2=bb, field3=cc 
ON DUPLICATE KEY UPDATE SET field1=aa, field2=bb, field3=cc; 

但現在我想實現的是,僅更新完成後,如果條件(WHERE)是真實的。

在語法上不正確:

INSERT INTO table1 SET field1=aa, field2=bb, field3=cc 
ON DUPLICATE KEY UPDATE SET field1=aa, field2=bb, field3=cc WHERE field4=zz; 

任何想法正確的SQL語句是如何?

非常感謝。

回答

9

使用IF()應該工作,雖然不是很好:

INSERT INTO table1 SET 
field1=aa, 
field2=bb, 
field3=cc 
ON DUPLICATE KEY UPDATE SET 
field1 = IF(field4 = zz, aa, field1), 
field2 = IF(field4 = zz, bb, field2), 
field3 = IF(field4 = zz, cc, field3) 

只有更新,如果條件滿足新值的字段,否則保持舊的。