当mysql报错:1093 - You can’t specify target table ‘department’ for update in FROM clause 的时候,说明你想查询一张表的数据,再根据这个数据修改同一张表的数据,这在mysql是不允许的。但是有其他方法可以实现同样的效果:
原来的sql:
UPDATE department
SET isParent = 0
WHERE
id = ( SELECT parentId FROM department WHERE id = 108 )
修改后:
UPDATE department
SET isParent = 1
WHERE id =
(
SELECT d2.parentId
FROM (
SELECT d3.parentId
FROM department as d3
WHERE d3.id = 108
) as d2
);
显而易见,就是再用一层select语句包起来,相当于把查询数据的select修饰成一个表,这样就可以"骗"过mysql。
本文介绍了一种解决MySQL中更新自引用表时出现的错误1093的方法。通过使用子查询将原始的单层查询转换为两层查询的方式,成功绕过了MySQL对该类型操作的限制。
1441

被折叠的 条评论
为什么被折叠?



