这个 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的作用是啥?不带的话,有啥区别?