mysql sql_safe_updates常量错误

标签 mysql mysql-workbench

我尝试使用 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/

相关文章:

mysql - 错误 1067 (42000) : Invalid default value for 'created_at'

PHP MySQL 搜索表单,具有多个类别的多个复选框

c# - Winforms 上的 SQL 更新语句

mysql - 从表的特定字段中删除字符

mysql - 未知的列问题

mysql - MySQL如何获取每一列的总数

MySQL 工作台 : dumping whole data base in one sql file

php - MySQL查询返回空集怎么办?

MySQL数据导出: 'ascii' codec can't decode byte 0xc3 in position 60: ordinal not in range(128)

php - MySQL 将行更改为列