oracle - Oracle 12c 递归查询产品、类别关系
问题描述
我有如下数据。如果我搜索产品“P1”然后
我需要所有具有产品“P1”的类别
我需要与步骤 1中的类别相关的所有产品
说明: 产品 P1 在 C1、C2、C4 的类别中有效。因此,我将考虑这些类别中的所有产品,类别 C2 包含两个产品,即 P1、P4。
所以,我也必须考虑类别 C3,因为产品 P4 在 C3 中可用。检查所有记录并获取数据的类似方法。
我可以使用 Cursor、存储过程和临时表中的循环来实现这一点。有没有办法通过查询来获取数据?
解决方案
您可以EXISTS
按如下方式使用:
SQL> -- SAMPLE DATA
SQL> WITH YOUR_TABLE (CATEGORY, PRODUCT,AMOUNT) AS
2 (SELECT 'C1','P1',5 FROM DUAL UNION ALL
3 SELECT 'C1','P2',6 FROM DUAL UNION ALL
4 SELECT 'C2','P4',5 FROM DUAL UNION ALL
5 SELECT 'C2','P1',10 FROM DUAL UNION ALL
6 SELECT 'C3','P4',20 FROM DUAL UNION ALL
7 SELECT 'C3','P5',5 FROM DUAL UNION ALL
8 SELECT 'C3','P3',10 FROM DUAL UNION ALL
9 SELECT 'C4','P1',5 FROM DUAL UNION ALL
10 SELECT 'C5','P7',5 FROM DUAL UNION ALL
11 SELECT 'C5','P8',5 FROM DUAL UNION ALL
12 SELECT 'C5','P9',5 FROM DUAL)
13 -- YOUR QUERY STARTS FROM HERE
14 SELECT *
15 FROM YOUR_TABLE T
16 WHERE T.PRODUCT = 'P1'
17 OR EXISTS (
18 SELECT 1
19 FROM YOUR_TABLE P1LVL1
20 JOIN YOUR_TABLE P1LVL2
21 ON P1LVL2.PRODUCT = P1LVL1.PRODUCT
22 JOIN YOUR_TABLE P1LVL3
23 ON P1LVL3.CATEGORY = P1LVL2.CATEGORY
24 AND T.CATEGORY = P1LVL1.CATEGORY
25 AND P1LVL3.PRODUCT = 'P1'
26 )
27 ORDER BY CATEGORY,
28 PRODUCT;
CA PR AMOUNT
-- -- ----------
C1 P1 5
C1 P2 6
C2 P1 10
C2 P4 5
C3 P3 10
C3 P4 20
C3 P5 5
C4 P1 5
8 rows selected.
SQL>
推荐阅读
- android - Android webview 无法播放 mp4 格式以外的视频
- c - 8.5 K&R 书中更简单的代码,只有逻辑运算符而不是位运算和逻辑运算符
- angular - Angular 8 部署问题:Uncaught SyntaxError: Unexpected end of input error
- flutter - 如何转换流
列出 - redis - 需要知道哪些键被更频繁地访问
- java - Java8 - 如何将嵌套映射转换为按内部映射键值收集的嵌套映射列表
- android - 基于 API 级别的 GreenRobot EventBus 订阅
- r - 使用多个数据框过滤数据框值
- unity3d - Android 应用程序:如何在单击移动资产而不是按钮时触发声音播放
- swift - Apple Combine 的 PassthroughSubject 未编译