更新语句上的 MySQL 语法错误

Posted

技术标签:

【中文标题】更新语句上的 MySQL 语法错误【英文标题】:MySQL Syntax Error on update statement 【发布时间】:2012-12-05 19:52:16 【问题描述】:

我有当前的代码,

UPDATE i
SET LeadInventor = 
    CASE 
        WHEN gs.FirstInventorName IS NULL THEN 'No' 
        ELSE 'Yes' 
    END
FROM patentdb.Inventor i
    LEFT JOIN patentdb.generalsource gs
    ON i.InventorFirst + ' ' + i.InventorLast = gs.FirstInventorName

我不明白为什么会抛出以下错误:

Error Code: 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 'FROM patentdb.Inventor i     LEFT JOIN patentdb.generalsource gs     ON i.Invent' at line 7

FROM 语句是 MYSQL 的下划线

【问题讨论】:

【参考方案1】:

这是因为 FROM 子句在 MySQL UPDATE 语句中无效:

http://dev.mysql.com/doc/refman/5.6/en/update.html

你的运气可能会更好:

UPDATE Inventor i, generalsource gs
SET i.LeadInventor = CASE
  WHEN gs.FirstInventorName IS NULL THEN 'No'
  ELSE 'Yes'
END
WHERE i.InventorFirst + ' ' + i.InventorLast = gs.FirstInventorName

【讨论】:

【参考方案2】:

语法不正确。看看这个查询:

UPDATE patentdb.Inventor i
  LEFT JOIN patentdb.generalsource gs
  ON CONCAT(i.InventorFirst, ' ', i.InventorLast) = gs.FirstInventorName
SET LeadInventor = 
  CASE WHEN gs.FirstInventorName IS NULL THEN 'No' ELSE 'Yes' END

另外,我想说的是,在 MySQL 中最好使用 CONCAT 函数来生成新字符串。

【讨论】:

以上是关于更新语句上的 MySQL 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

更新时出现休眠错误:无法执行语句,在 'index=1' 附近使用正确的语法

纠正我在 mysql 触发器中的语法错误

在 sql 语法中出现错误,vb.net 中的 mysql update 语句

错误:您的 SQL 语法有错误 - 但 SQL 语句有效

更新语句语法错误

SQL 更新语句的语法错误