【问题标题】:Firebird concatenate node names recursivelyFirebird 递归地连接节点名称
【发布时间】:2022-11-22 09:57:57
【问题描述】:

我在用着火鸟2.1我有以下层次表:

NodeID, ParentNodeID, Name

对于根节点,ParentNodeID = -1。

IE。:

1, -1, Parent
2, 1, Child
3, 2, Child of child

我正在寻找递归查询(或存储过程)以通过以下方式输出串联:

Parent
Parent - Child
Parent - Child - Child of child

兄弟姐妹应按字母顺序排序。我该怎么做呢?

【问题讨论】:

    标签: recursion firebird recursive-query firebird2.1


    【解决方案1】:

    使用 Firebird 2.1,您只能使用这样的递归存储过程:

    create procedure tree (root integer) returns (result varchar(1000)) as
      declare id integer;
      declare n varchar(30);
      declare childs varchar(1000);
    begin
      for select NodeId, Name from t where ParentNodeId = :root order by Name into :id, :result do
       begin
        suspend;
        n = result;
        for select result from tree(:id) into :childs do
          begin
            result = n || ' - ' || childs;
            suspend;
          end
       end
    end
    

    https://dbfiddle.uk/_fY5xZS6

    在 Firebird 3.0 和更新版本中,您可以使用递归 CTE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      相关资源
      最近更新 更多