我尝试运行以下命令:
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
1条答案
按热度按时间kqqjbcuj1#
试试这个