递归验证oracle层次结构查询中的子记录

问题描述 投票:0回答:1

我有如下表格:source_t

商品编号 记录代码 记录类型 发送代码 发送类型 旗帜
10001 001 'FC' 0021 '立桨冲浪' 0
10001 002 'MA' 001 'FC' 0
10001 003 'MC' 001 'FC' 1
10001 001 'AB' 003 'MC' 0
10001 004 '公斤' 001 'AB' 0
10002 001 'FA' 0031 “立桨冲浪” 0
10002 002 'MA' 001 'FA' 0
10002 003 'MC' 001 'FA' 0
10002 001 'AB' 003 'MC' 0
10002 004 '公斤' 001 'AB' 0

我的查询是我需要选择发送者类型为 SUP 且每个项目编号标记为 0 的所有记录,并且我需要将接收者代码和接收者类型与发送者代码和发送者类型递归匹配,并且是否有任何一个子记录具有标记1 代表特定的项目编号(子项应该以某种方式连接到父项),那么我需要将发送者类型 SUP 的结果显示为 1。 该表很大,包含 1 亿条记录,每个项目编号有多个子记录。并且会有超过 50000 个不同的项目编号

输出:

商品编号 记录代码 记录类型 发送代码 发送类型 旗帜
10001 001 'FC' 0021 '立桨冲浪' 1
10002 001 'FA' 0031 “立桨冲浪” 0
sql oracle-database oracle11g
1个回答
0
投票

使用相关分层查询:

SELECT Item_no,
       rec_code,
       rec_type,
       send_code,
       send_type,
       CASE
       WHEN EXISTS(
              SELECT 1
              FROM   source_t x
              WHERE  flag = 1
              START WITH t.ROWID = x.ROWID
              CONNECT BY
                     PRIOR rec_code = send_code
              AND    PRIOR rec_type = send_type
            )
       THEN 1
       ELSE 0
       END AS flag
FROM   source_t t
© www.soinside.com 2019 - 2024. All rights reserved.