【问题标题】:What is wrong with this UPDATE query?这个 UPDATE 查询有什么问题?
【发布时间】:2014-11-18 06:25:48
【问题描述】:

我正在尝试使用另一个表中的值 + 一些算术来更新表列。我不是专家,但阅读一些问题似乎我必须在 COMMON 列上使用 JOIN 来从两个表中选择数据。

UPDATE Farming SET Farming.GoldLabor = Farming.GoldPerUnit / (DataTable.LaborYieldA + 
DataTable.LaborYieldB) 
FROM Farming f INNER JOIN DataTable d ON f.name = d.name;

错误是:

#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 Farming f INNER JOIN 
DataTable d ON f.name = d.name' at line 1  

我正在使用此处回答的其他几个问题的代码。

https://stackoverflow.com/a/707383

https://stackoverflow.com/a/1746161

我正在使用来自 1&1 Hosting 的 mySQL,并尝试使用 JOIN 和 INNER JOIN。

感谢您的宝贵时间。

【问题讨论】:

  • 你能发布你的实际查询吗?错误中有LIMIT,但您发布的代码没有。
  • 抱歉,一定是在尝试其他方法时出错。我将错误更新为问题查询时显示的内容。

标签: mysql join sql-update


【解决方案1】:

MySQL 支持带有连接的多表 UPDATE 语法,但不像你正在做的那样。您展示的语法可能适用于 Microsoft SQL Server,但不适用于 MySQL。

这应该可行:

UPDATE Farming f INNER JOIN DataTable d ON f.name = d.name
SET f.GoldLabor = f.GoldPerUnit / (d.LaborYieldA + d.LaborYieldB);

【讨论】:

  • 谢谢你,我之前确实更喜欢这种语法,因为我先说明了我将使用什么,然后再使用它。我需要更加注意我使用的是什么查询“引擎”。
  • 不管怎样,MySQL 和 Microsoft 都没有错,因为多表 UPDATE 不在标准 SQL 规范中。两家供应商都将其作为标准的扩展。
【解决方案2】:

试试这个:

UPDATE farming as f
 INNER JOIN DataTable d ON f.name = d.name
   SET f.GoldLabor = f.GoldPerUnit / (DataTable.LaborYieldA + DataTable.LaborYieldB) ;

SQLFiddle

【讨论】:

    猜你喜欢
    • 2011-09-29
    • 2011-10-13
    • 1970-01-01
    • 2010-09-07
    • 2010-10-04
    • 2011-01-15
    • 2021-05-08
    相关资源
    最近更新 更多