有以下查询:
UPDATE lessonstatus INNER JOIN user ON lessonstatus.user_id = user.user_id SET user_id = (SELECT user_id FROM user WHERE username = 'too_many_accounts') WHERE last_name = 'stupid' AND first_name = 'user' AND username != 'too_many_accounts' AND lessonstatus.lesson_id NOT IN (SELECT lesson_id FROM lessonstatus WHERE user_id = 1); 但是,尝试执行该错误时出现以下错误:
Error Code : 1093 You can't specify target table 'lessonstatus_rtab' for update in FROM clause 我将如何解决此查询,使其起作用?
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您无法SELECT从要在同一查询中更新的表(甚至在子查询中)。这就是错误“无法指定目标表”的含义。
但是,你可以加入user,并lessonstatus在多次UPDATE声明,并使用创造性的加入标准来挑选出你想要的各行。
用联接模拟的方法NOT IN是做一个LEFT OUTER JOIN。如果该连接的右侧不匹配,那就是NOT IN正确的。
UPDATE lessonstatus l1 INNER JOIN user u1 ON (l1.user_id = u1.user_id) INNER JOIN user u2 ON (u2.username = 'too_many_accounts') LEFT OUTER JOIN lessonstatus l2 ON (l1.lesson_id = l2.lesson_id AND l2.user_id = 1) SET l1.user_id = u2.user_id WHERE u1.last_name = 'stupid' AND u1.first_name = 'user' AND u1.username != 'too_many_accounts' AND l2.lesson_id IS NULL; -- equivalent to "l NOT IN l2" nb:我已经对该查询的语法进行了测试,但是没有对实际数据进行测试。无论如何,它应该可以帮助您入门。