POSTGRESQL中ERROR: recursive query "t" column 2 has type character varying(150) in non-recursive 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

得到正确答案如下

原文地址:https://www.cnblogs.com/hetutu-5238/p/9008303.html

时间: 2024-11-06 23:13:33

POSTGRESQL中ERROR: recursive query "t" column 2 has type character varying(150) in non-recursive term but type character varying overall的相关文章

golang自己定义数据类型查询与插入postgresql中point数据

golang自己定义数据类型查询与插入postgresql中point数据 详细代码例如以下: package main import ( "bytes" "database/sql" "database/sql/driver" "fmt" _ "github.com/lib/pq" "strconv" "strings" ) // 自己定义支持类型 type Poi

golang自定义数据类型查询与插入postgresql中point数据

golang自定义数据类型查询与插入postgresql中point数据 具体代码如下: package main import ( "bytes" "database/sql" "database/sql/driver" "fmt" _ "github.com/lib/pq" "strconv" "strings" ) // 自定义支持类型 type Point s

PostgreSQL 中定义自己需要的数据类型

PostgreSQL解决某系数据库中的tinyint数据类型问题,创建自己需要的数据类型如下: CREATE DOMAIN tinyint AS smallint CONSTRAINT tinyint_check CHECK (VALUE >= 0 AND VALUE <= 255); ALTER DOMAIN tinyint OWNER TO postgres; COMMENT ON DOMAIN tinyint IS 'tinyint type between 0 and 255'; po

ERROR: No query specified

mysql中执行show命令的时候,提示以下信息: mysql> show variables like 'datadir'\G; *************************** 1. row *************************** Variable_name: datadir Value: /var/mysql/data/ 1 row in set (0.00 sec) ERROR: No query specified 解决方法:取消最后的分号 mysql> sho

PostgreSQL中initdb做了什么

在使用数据库前,是启动数据库,启动数据库前是initdb(初始化数据库):一起来看一下initdb做了什么吧. 初始化数据库的操作为: ./initdb -D /usr/local/pgsql/data initdb把用户指定的选项转换成对应的参数,通过外部程序调用的方式执行postgres程序.postgres程序在这种方式下将进入bootstrap模式创建数据集簇,并读取后端接口postgres.bki文件来创建模板数据库. /*-------------------------------

Spark SQL: Error in query: undefined function错误的解决方法

本文原文出处: http://blog.csdn.net/bluishglc/article/details/50748937 严禁任何形式的转载,否则将委托CSDN官方维护权益! 问题描述 如果你在Spark SQL上试图调用在HIVE注册的自定义函数(UDF)时,你可能会遇到这样的错误: Spark SQL: Error in query: undefined function xxxxxx 这个问题发生在Spark 1.5.0, 1.5.1和1.5.2版本上,对此Spark官方有一个专门的

Error Code: 1054. Unknown column &#39;age&#39; in &#39;user&#39;

1.错误描述 10:28:20 alter table user modify age int(3) after sex Error Code: 1054. Unknown column 'age' in 'user' 0.000 sec 2.错误原因 原本在user表中有age字段,但是在测试阶段删除了,后期将age位置修改,所以报错 3.解决办法 首先,先向user表中插入age字段:然后再修改它的位置 Error Code: 1054. Unknown column 'age' in 'u

Jmeter BeanShell 引用变量报错jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Parse error at line 14, column 181 : Error or number too big for integer

如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默认以String类型对数据进行读取的:范围-2147483648到2147483647,如果超出这个范围(例如2147483648这个数字):jmeter控制台则会抛出如下异常:jmeter.util.BeanShellInterpreter: Error invoking bsh method:

Postgresql中存储过程(函数)调用存储过程(函数)时应用注意的问题

在postgresql中我们在执行存储过程中往往会使用select 存储过程,但是如果存储过程中再调用 存储过程时,就不能这样用了,应该用perform 存储过程,来看看官方文档的说明 ===================================================================== 执行一个没有结果的表达式或者命令 有时候我们希望计算一个表达式或者一个命令,但是却丢弃其结果(通常因为我们经常调用一些存在有用的副作用但是不存在有用结果值的函数). 要在 P