基于上一个查询的结果,在Birt中使用Javascript执行新查询

基于上一个查询的结果,在Birt中使用Javascript执行新查询,javascript,sql,postgresql,birt,recursive-query,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 o

我有一个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语句,它允许我执行类似的操作?

a可以在单个查询中为您执行此操作:

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;
到db服务器的单程往返通常要便宜得多。
Closley相关案例: