我有如下表格: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 |
使用相关分层查询:
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