【问题标题】:Using IF() With ON DUPLICATE KEY UPDATE in MySQL在 MySQL 中使用带有 ON DUPLICATE KEY UPDATE 的 IF()
【发布时间】:2012-05-08 12:09:38
【问题描述】:

我有一个运行 MySQL 查询的 PHP 脚本。

$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

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'IS NOT NULL .....' 附近使用的正确语法

我已经检查了 MySQL 参考手册中 IS NOT 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 服务器上运行。

【问题讨论】:

    标签: mysql mysql-error-1064


    【解决方案1】:

    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 的值,但忘记删除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多