標籤:|| rom 字串 column 錯誤 where 字元 部門 _id
最近在做項目的時候有個需求是需要查到當前登入的使用者下轄所有地區的資料,並將查詢出來的部門資訊以如下格式展示
最高人民法院>江蘇省進階人民法院>南通市中級人民法院
最高人民法院>江蘇省進階人民法院>連雲港市中級人民法院
,於是用如下語句查詢
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 corpNameFROM T
但是出現了如下錯誤
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 時由於是拼接的字串 所以欄位屬性與前面的
c_name不一致,所以導致報錯,
解決辦法:為拼接後的字串指定欄位格式
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
得到正確答案如下
POSTGRESQL中ERROR: recursive query "t" column 2 has type character varying(150) in non-recursive term but type character varying overall