在mysql中执行如下语句,提示标题的报错信息
DELETE FROM sys_role_menu WHERE menu_id IN
( SELECT menu_id FROM sys_role sr JOIN sys_role_menu srm ON (sr.role_id=srm.role_id) WHERE sr.role_key='xxx') ;
上面语句的含义本来是找也某个角色下配置的菜单,然后把这些菜单权限删除掉。但是执行的时候报错了,
如果把上面的语句改成查询的话,是可以正常执行的
SELECT * FROM sys_role_menu t WHERE menu_id IN
( SELECT menu_id FROM sys_role sr JOIN sys_role_menu srm ON (sr.role_id=srm.role_id) WHERE sr.role_key='xxx') ;
查询结果如下:
image.png
最上面delete语句的错误原因是子查询中也含有sys_role_menu表,为了解决这个问题,可以在子查询中再加一层select查询,如下:
DELETE FROM sys_role_menu t WHERE t.menu_id IN
( SELECT a.menu_id FROM
( SELECT srm.menu_id FROM sys_role sr JOIN sys_role_menu srm ON (sr.role_id=srm.role_id) WHERE sr.role_key='interviewer')
AS a
);
网友评论