【问题标题】: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。