zoukankan      html  css  js  c++  java
  • POSTGRESQL中ERROR: recursive query "t" column 2 has type character varying(150) in nonrecursive term but type character varying overall

    最近在做项目的时候有个需求是需要查到当前登录的用户下辖所有区域的数据,并将查询出来的部门信息以如下格式展示

    最高人民法院>江苏省高级人民法院>南通市中级人民法院
    最高人民法院>江苏省高级人民法院>连云港市中级人民法院

    ,于是用如下语句查询

    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

     但是出现了如下错误

     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

     得到正确答案如下

  • 相关阅读:
    20200311 1. 消息中间件概述
    20200311 0. RabbitMQ 安装
    20210309 java.lang.Integer
    20210304. Redis【归档】
    20210304. 8. Redis 大厂面试汇总
    20210304. 7. Redis 企业实战
    20210304. 6. Redis 高可用方案
    20210304. 5. Redis 扩展功能
    Evolution Strategies as a Scalable Alternative to Reinforcement Learning
    脉冲神经网络研究现状及展望——论文摘抄
  • 原文地址:https://www.cnblogs.com/hetutu-5238/p/9008303.html
Copyright © 2011-2022 走看看