我正在尝试使用以下查询更新表
update at_product A join
(
SELECT atbillfields.billeditemguid,count(*) AS numberOfPeopleBought
,sum(atbillfields.billeditemqty) AS soldquantity
FROM jtbillingtest.at_salesbill atsalesbill
JOIN jtbillingtest.at_billfields atbillfields
ON atsalesbill.billbatchguid=atbillfields.billbatchguid
WHERE atsalesbill.billcreationdate BETWEEN '2013-09-09' AND date_add('2013-09-09', INTERVAL 1 DAY)
GROUP BY atbillfields.billeditemguid) B ON B.billeditemguid = A.productguid
SET A.productQuantity = A.productQuantity - B.soldquantity
但是,得到以下异常:
错误代码:1175。您正在使用安全更新模式,但您尝试过 更新没有使用KEY列的WHERE的表要禁用安全性 模式,切换首选项中的选项 - > SQL查询并重新连接。
当我使用where
这样的更新提供A.productQuantity = 1
子句时,它更新了该特定内容。
有人能指出为什么我无法执行查询以及如何解决问题吗?
答案 0 :(得分:20)
看看:
如果您想在没有where键的情况下进行更新,则必须执行
SET SQL_SAFE_UPDATES=0;
在你的查询之前。
另一种选择是重写您的查询o包括一个键。
答案 1 :(得分:4)
此错误表示您正在安全更新模式下运行,因此您有两个选择:
SET SQL_SAFE_UPDATES = 0;
答案 2 :(得分:2)
您可以尝试使用MysqlWorkbench
转到编辑 - >首
点击" SQL编辑器"选项卡并取消选中"安全更新"复选框
查询 - >重新连接到服务器(注销然后登录)
我希望它对你有所帮助。
答案 3 :(得分:1)
在MySQL 5.5
,如果您正在使用MySQL Workbench
,那么
Edit
- > Preferences
"SQL Queries"
标签,然后取消选中"Safe Updates"
复选框。Query
- > 重新连接到服务器(logout
然后login
)这很有效。
答案 4 :(得分:0)
就我而言,我禁用检查外键使用此 Mysql 命令:
SET FOREIGN_KEY_CHECKS=0;