我尝试使用 INNER JOIN
更新表,如下所示(dummy.ID
设置为主键):
UPDATE dummy
INNER JOIN original
ON dummy.FirstName =original.FirstName
AND dummy.LastName = original.LastName
SET dummy.col1 = original.col1
WHERE dummy.ID <> 0;
激活SQL_SAFE_UPDATE
,并且不允许以任何方式禁用它,对于上述语句,我收到著名的错误:您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表
。
我尝试过 WHERE KEY IN (,)
、WHERE KEY NOT NULL
以及许多其他方法来实现 WHERE
子句,但一切都因同样的错误而失败。它的唯一工作方式是使用 WHERE dummy.ID = 1
,但这当然只更新一行。
可能是因为我使用了JOIN
吗?有没有办法在不禁用sql_safe_update
的情况下进行此更新?
最佳答案
我设法找到了答案,因此如果其他人遇到与我相同的问题,我将作为答案发布。
问题在于 JOIN
的使用,出于某种原因,编译器根据 sql_safe_update
将其识别为错误使用的 WHILE
。
UPDATE dummy
SET col1 =
(
SELECT col1 FROM original
WHERE dummy.FirstName = original.FirstName
AND dummy.LastName = original.LastName
)
WHERE dummy.ID <> 0;
关于mysql sql_safe_updates常量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39008575/