更新时间:2024-08-20 GMT+08:00

层次递归查询函数

层次递归查询语句中可使用以下函数返回连接路径上的相关信息。

  • sys_connect_by_path(col, separator)

    描述:仅在层次递归查询中适用,用于返回从根节点到当前行的连接路径。

    参数col为在路径中显示的列的名称,只支持类型为CHAR/VARCHAR/NVARCHAR2/TEXT/INT1/INT2/INT4/INT8/FLOAT4/FLOAT8/NUMERIC的列,参数separator为路径节点之间的分隔符。当前该函数col输入不支持表达式输入。

    返回值类型:text

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    --建表导数。
    gaussdb=# CREATE TABLE connect_by_table(id int,pid int,name text);
    CREATE TABLE
    gaussdb=# INSERT INTO connect_by_table VALUES(1,0,'a'),(2,1,'b'),(3,2,'c'),(4,1,'d');
    INSERT 0 4
    --查询。
    gaussdb=# SELECT *, sys_connect_by_path(name, '-') FROM connect_by_table START WITH id = 1 CONNECT BY prior id = pid ORDER BY pid, id;
     id | pid | name | sys_connect_by_path
    ----+-----+------+---------------------
      1 |   0 | a    | -a
      2 |   1 | b    | -a-b
      4 |   1 | d    | -a-d
      3 |   2 | c    | -a-b-c
    (4 rows)
    --恢复环境。
    gaussdb=# DROP TABLE IF EXISTS connect_by_table;
    DROP TABLE
    
  • connect_by_root(col)

    描述:仅在层次递归查询中适用,用于返回当前行最顶层父亲行中某列的值。

    参数col为输出列的名称。

    返回值类型:即为所指定列col的数据类型。

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    --建表导数。
    gaussdb=# CREATE TABLE connect_by_table(id int,pid int,name text);
    CREATE TABLE
    gaussdb=# INSERT INTO connect_by_table VALUES(1,0,'a'),(2,1,'b'),(3,2,'c'),(4,1,'d');
    INSERT 0 4
    --查询。
    gaussdb=# SELECT *, connect_by_root(name) FROM connect_by_table START WITH id = 1 CONNECT BY prior id = pid ORDER BY pid, id;
     id | pid | name | connect_by_root
    ----+-----+------+-----------------
      1 |   0 | a    | a
      2 |   1 | b    | a
      4 |   1 | d    | a
      3 |   2 | c    | a
    (4 rows)
    --恢复环境。
    gaussdb=# drop table if exists connect_by_table;
    DROP TABLE