【问题标题】:How to recursively create the full ancestry of a given record in BigQuery如何在 BigQuery 中递归创建给定记录的完整祖先
【发布时间】:2023-02-24 04:23:10
【问题描述】:

我有一个包含两列的表格,id 和 parentId。我想递归地找到给定记录的所有祖先。所以,如果我有记录 145,它的父记录是 233,而 233 的父记录是 651,我的结果将类似于下面,假设我只有 id 145 可用(这假设对于根记录,parentId = 0)。

| id  | parentId |
 ----- ----------
| 651 |     0    |
| 233 |    651   |
| 145 |    233   |

我如何使用 SQL 对我的 BigQuery 表递归执行此查询?我花了一些时间环顾四周,但每个答案似乎都过于复杂。

【问题讨论】:

    标签: sql recursion google-bigquery


    【解决方案1】:

    使用 BigQuery 中的新 recursive 功能可以通过以下方式完成:

    with recursive ancestors as (
        select * from `dataset.MyTable` 
        where id = 145
        union all
        select m.* 
        from `dataset.MyTable` as m, ancestors as a
        where m.id = a.parentOrderId
    ) 
    select * from ancestors;
    

    我在阅读 Christianlauer here 的帖子后发现了这个。

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 2021-12-03
      • 2010-11-24
      • 1970-01-01
      • 2016-10-18
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      相关资源
      最近更新 更多