POSTGRESQL中ERROR: recursive query "t" column 2 has type character varying(150) in non-recursive term

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

相關文章
相關標籤/搜索