【问题标题】:How to get the result of CONNECT_BY_ISCYCLE and CONNECT_BY_ISLEAF in snowflake without using them?如何在不使用雪花的情况下获得 CONNECT_BY_ISCYCLE 和 CONNECT_BY_ISLEAF 的结果?
【发布时间】:2023-03-25 05:38:01
【问题描述】:

我需要进行分层查询,我需要得到 CONNECT_BY_ISCYCLE 和 CONNECT_BY_ISLEAF 的结果,但是这些功能在 Oracle 中支持,而不在 Snowflake 中。

有哪些替代方法可以在雪花中实现 CONNECT_BY_ISCYCLE 和 CONNECT_BY_ISLEAF 的功能而不使用它们,因为那里不支持这些关键字?

【问题讨论】:

  • 我猜代码块/sn-p 可以做这件事,但我无法构建块。

标签: snowflake-cloud-data-platform


【解决方案1】:
【解决方案2】:

是的,我在那里看过。我还查看了https://docs.snowflake.net/manuals/sql-reference/constructs/connect-by.html,它清楚地表明 Snowflake 不支持这些功能。 我试图在代码块下面找到一个替代方案,但在雪花中面临各种错误。

person_vertex as (
    select 
        emp_number, 
        user_id 
    from person
),

person_edges as ( 
    select 
        supervisor_emp_number, 
        emp_number 
    from person 
    where supervisor_emp_number is not null
),

select
    pv.emp_number emp_id_pk,
    level,
    CONNECT_BY_ROOT pv.emp_number AS root,
    concat(SYS_CONNECT_BY_PATH(pv.emp_number,':'),':') as path,
    -- CONNECT_BY_ISCYCLE AS iscyclic, ------------------- no idea how to implement this
    -- CONNECT_BY_ISLEAF as isleaf ------------------- i tried below block, but it is not working
    case
        when (pe.supervisor_emp_number in (select emp_number from pv)) then 0
        else 1
    end AS isleaf
from person_vertex pv
    left join person_edges pe on pv.emp_number = pe.emp_number
connect by prior A.emp_number = A.supervisor_emp_number
start with A.supervisor_emp_number is null

非常感谢您对此块的任何帮助。

谢谢。

enter code here

【讨论】:

    猜你喜欢
    • 2017-06-08
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多