我尝试运行以下命令:
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
答案 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');