带JOIN的SQL错误1175

时间:2018-07-30 10:08:44

标签: mysql safe-mode

我尝试运行以下命令:

UPDATE project JOIN folder ON folder.project_id = project.id
  SET project.source_folder_id = folder.id
  WHERE folder.name = 'source';

当然,我遇到了著名的错误1175:您正在使用安全更新模式,并且尝试在不使用使用KEY列的WHERE的情况下更新表。当然,我固定并写了:

 … WHERE id > 0 AND folder.name = 'source';

这当然会失败,因为id是模棱两可的。所以我写了

  … project.id > 0 AND folder.name = 'source';

,但我仍然收到该错误。我尝试了以下每种变体,但都没有成功:

  … WHERE folder.id > 0 AND folder.name = 'source';
  … WHERE project.id > 0 AND folder.id > 0 AND folder.name = 'source';
  … WHERE (project.id > 0 AND folder.id > 0 AND folder.name = 'source');
  … WHERE (project.id, folder.id) > (0,0) AND folder.name = 'source';

我仔细检查了两个表,id列实际上是主键,情况就是如此。我知道我可以SET SQL_SAFE_UPDATES=0;,但是感觉更像是黑客,很可能会被团队拒绝,并且我想了解为什么查询不起作用?它可以固定在安全模式下运行吗?如果可以,怎么办?

version:                 5.7.19-log
innodb_version:          5.7.19
version_comment:         MySQL Community Server (GPL)
version_compile_machine: x86_64
version_compile_os:      Win64

1 个答案:

答案 0 :(得分:0)

尝试一下

UPDATE project p 
SET p.source_folder_id = (Select f.id From folder f 
                          where f.project_id = p.id and f.name = 'source');