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