基于先前查询的结果,在Birt中使用Javascript执行新查询

时间:2014-06-30 21:59:54

标签: javascript sql postgresql birt recursive-query

我使用以下查询获得了包含数据集的BIRT报告

select id, parentId from objectTable where id=?

查询中使用的id是通过BIRT参数传递的,并根据我得到的结果我想找到parentObject。执行上述查询后,我想检查是否存在parentObject,并通过检查上面查询中的parentId值来执行此操作,如果它不为零则存在父对象。所以我不得不说

while (parentId > 0)
    select id, parentId from objectTable where id=parentId

然后我需要继续循环,直到parentId为零,我知道我有最大的祖先。

有没有办法在数据集上使用Javascript来执行此操作?或者可能是一个嵌套的sql语句,它允许我做这样的事情?

1 个答案:

答案 0 :(得分:1)

recursive CTE可以在一个查询中为您完成此操作:

WITH RECURSIVE cte AS (
   SELECT id, parentid
   FROM   objecttable
   WHERE  id = ?

   UNION ALL
   SELECT o.id, o.parentid
   FROM   cte c
   JOIN   objecttable o ON o.id = c.parentid
   WHERE  c.parentid > 0
   )
SELECT *
FROM   cte
WHERE  parent_id = 0;

对数据库服务器的单次往返通常很多更便宜 克洛斯利相关案件:
Tree Structure and Recursion