这个 UPDATE 查询有啥问题?

Posted

技术标签:

【中文标题】这个 UPDATE 查询有啥问题?【英文标题】: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://***.com/a/707383

https://***.com/a/1746161

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

感谢您的宝贵时间。

【问题讨论】:

你能发布你的实际查询吗?错误中有LIMIT,但您发布的代码没有。 抱歉,一定是在尝试其他方法时出错。我将错误更新为问题查询时显示的内容。 看起来像重复:***.com/questions/15209414/mysql-update-join 【参考方案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

【讨论】:

以上是关于这个 UPDATE 查询有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

update 后面带exists的作用是啥?不带的话,有啥区别?

这个 sequelize 查询有啥问题

这个 SQL 查询有啥问题[重复]

这个 SQLCe 查询有啥问题?

MySQL 中的 INSERT 和 UPDATE 有啥区别?

这个 presto 查询有啥问题?