MySQL 错误代码:在带有 WHERE 子句的 UPDATE 期间出现 1175

Posted

技术标签:

【中文标题】MySQL 错误代码:在带有 WHERE 子句的 UPDATE 期间出现 1175【英文标题】:MySQL Error Code: 1175 during UPDATE with a WHERE clause 【发布时间】:2022-01-04 16:57:18 【问题描述】:

我正在尝试将 Paymenttotal 更新为来自 Packagesprice 的总数,其中事务编号相同。但是 mysql 一直给我错误:

错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。要禁用安全模式,请切换 Preferences -> SQL Editor 中的选项并重新连接。

命令如下:

UPDATE Payment py
SET total = (SELECT SUM(price) FROM Package pk
             WHERE py.transactionNo = pk.transactionNo);

我认为我正在使用一个使用 KEY 列的 WHERE(transactionNoPayment 的主键)。我是不是写错了?

【问题讨论】:

这能回答你的问题吗? MySQL error code: 1175 during UPDATE in MySQL Workbench 错误消息告诉您,您没有使用键列更新来自py 的单行。 WHERE 子句不是UPDATE 查询本身的一部分,而是子查询的一部分 是否有任何逻辑为什么要保存作为计算字段的“总计”?我们不保存这些数据。 @LeandroBardelli 理想情况下,我认为这不是必需的,但它适用于我需要“有趣的更新语句”的学校项目。因此,如果由于未保存计算字段而导致此查询没有意义,我将不得不尝试其他方法 @LeandroBardelli 没问题!您所说的在现实生活中的应用程序中绝对有意义 【参考方案1】:

您没有更新的 where 条件 .. 在这种情况下,您可以使用子查询使用正确的更新连接

UPDATE Payment py
INNER JOIN (
    SELECT pk.transactionNo, SUM(price) sum_price
    FROM Package pk
    GROUP BY pk.transactionNo
    WHERE py.transactionNo = pk.transactionNo
) t on  py.transactionNo = t.transactionNo

SET py.total =t.sum_price

【讨论】:

这给了我一个错误:“INNER”在这个位置无效,期待 SET 答案已更新 .. 缺少正确的集合子句 ..

以上是关于MySQL 错误代码:在带有 WHERE 子句的 UPDATE 期间出现 1175的主要内容,如果未能解决你的问题,请参考以下文章

带有条件检查的 PHP MySQL PDO TextArea Where 子句

MySQL 不使用带有 WHERE IN 子句的索引?

使用asp.net mv在ado.net中选择带有where子句的查询

带有限定标识符的 where 子句中的不明确列

带有 Haskell 梁的简单 where 子句的类型错误

带有相关数据的where子句的Linq查询