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 【问题描述】:我正在尝试将 Payment
的 total
更新为来自 Packages
的 price
的总数,其中事务编号相同。但是 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(transactionNo
是 Payment
的主键)。我是不是写错了?
【问题讨论】:
这能回答你的问题吗? 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 子句