最近在作項目的時候有個需求是須要查到當前登陸的用戶下轄全部區域的數據,並將查詢出來的部門信息以以下格式展現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語句