【问题标题】:Execute new query using Javascript in Birt based on result of previous query根据先前查询的结果在 Birt 中使用 Javascript 执行新查询
【发布时间】:2014-06-30 21:59:53
【问题描述】:

我有一个 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 语句?

【问题讨论】:

    标签: javascript sql postgresql birt recursive-query


    【解决方案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;
    

    到数据库服务器的单次往返通常要便宜得多
    Closley相关案例:
    Tree Structure and Recursion

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 2017-12-07
      • 2018-09-12
      相关资源
      最近更新 更多