2011-08-08 33 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) 

只有更新,如果条件满足新值的字段,否则保持旧的。