使用IF()与MySQL中的ON DUPLICATE KEY UPDATE

问题描述:

我有一个运行MySQL查询的PHP脚本。使用IF()与MySQL中的ON DUPLICATE KEY UPDATE

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2= IF(IS NOT NULL '$val1', 'test', 'col2)"; 

这是我想要做的: Col1是主键。如果有重复,它会检查col2的插入值是否为空。如果不是,则会用值更新,否则值将保持不变。

此插入失败。当我尝试在SQLyog的手动运行(代替变量将实际值),我收到以下错误: 错误代码:1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS NOT NULL.....'

我已经检查了MySQL参考手册的NOT IS NULL比较运算符(http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_is-not-null),并且还用于INSERT ... ON DUPLICATE KEY UPDATE语法(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html),并且相信我正确使用了两者,但显然情况并非如此。

我在做什么错?

仅供参考,我使用的是MySQL 5,脚本在RHEL5服务器上运行。

语法IS NOT NULL column是错误的。正确:column IS NOT NULL。我不确定这是什么'test'。你说你想更新列或保持原样。

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2 = IF('$val2' IS NOT NULL, '$val2', col2)"; 

也可以书面:

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE 
      col2 = COALESCE(VALUES(col2), col2)"; 
+0

非常感谢您的帮助!另外,'测试'的价值是一个疏忽。这是我在测试时用于col2的一个值,并且忘记将其删除。 – 2012-04-27 17:45:59