sql错误1175 with join

sulc1iza  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(324)

我尝试运行以下命令:

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

当然,我得到了著名的错误1175:您使用的是安全更新模式,并且您试图更新一个没有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';

我在两张table上都查了一遍 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
kqqjbcuj

kqqjbcuj1#

试试这个

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

相关问题