1356 - View 'xxx' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

我有个递归的sql语句,在mysql8下是没问题的,但是在tidb7.5下确保错。怀疑TIDB不支持在 with recursive r ()中查询视图,具体的语句是这样的:

with recursive r as (
select tt.ID, tt.P_ID from sys_org tt where tt.p_id = 0
UNION ALL
select tt.ID, tt.P_ID from sys_org tt,r where tt.P_ID = r.ID
) select * from r

其中sys_org是个视图,里面存储了组织的数据,ID是主键,P_ID是组织的上级ID。TIDB报错如下:
1356 - View ‘dsp.sys_org’ references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

sys_org这个视图的定义很简单,就是从另一个库表中查询出来:

这个视图可以正常查询吗?当前账号有dgsuser库的权限吗?

tidb上先试一下
SELECT * FROM sys_org LIMIT 1;
能不能查询

可以的,当前账号有这个库的全部权限

可以的

是不是大小写敏感导致的

https://github.com/pingcap/tidb/issues/54582

应该是这个bug。

https://github.com/pingcap/tidb/pull/57331

7.5.5之后的版本修复。

建议升级到7.5.5再试试。

大小写都统一,空格也去除,权限也都检查一次,如果都没有问题,可能要考虑是不是bug了。