最近在作项目的时候有个需求是须要查到当前登陆的用户下辖全部区域的数据,并将查询出来的部门信息以以下格式展现sql
最高人民法院>江苏省高级人民法院>南通市中级人民法院
最高人民法院>江苏省高级人民法院>连云港市中级人民法院spa
,因而用以下语句查询code
WITH RECURSIVE T AS ( SELECT c_id, c_name FROM db_aty.t_aty_corp WHERE c_pid IS NULL UNION ALL SELECT D.c_id, T.c_name || '>' || D.c_name FROM db_aty.t_aty_corp D JOIN T ON D.c_pid = T .c_id ) SELECT c_id AS corpId, c_name AS corpName FROM T
可是出现了以下错误blog
ERROR: recursive query "t" column 2 has type character varying(150) in non-recursive term but type character varying overall字符串
根据错误提示猜想这是由于在sql语句中使用union all 时 须要先后查询出的字段属性一致,而在进行查询时,使用t.c_name || '>' || D.c_name 时因为是拼接的字符串 因此字段属性与前面的io
c_name不一致,因此致使报错,class
解决办法:为拼接后的字符串指定字段格式登录
WITH RECURSIVE T AS ( SELECT c_id, c_name::varchar(150) FROM db_aty.t_aty_corp WHERE c_pid is null UNION ALL SELECT D.c_id, (T.c_name || '>' || D.c_name )::varchar(150) as c_name FROM db_aty.t_aty_corp D JOIN T ON D.c_pid = T .c_id ) SELECT c_id AS corpId ,c_name as corpName FROM T
获得正确答案以下sql语句