【发布时间】:2021-02-10 22:55:44
【问题描述】:
我对几个很难破解的表有一些复杂的要求。
有 2 张桌子。表A和表B
TableA 的结构类似于:
-------------------------------------
ID COL1 COL2 CAT
-------------------------------------
1 RecAA RecAB 3
2 RecBA RecBB 3
3 RecCA RecCB 2
4 RecDA RecDB 2
5 RecEA RecEB 1
-------------------------------------
TableB 的结构类似于:
-----------------
COL3 TYPE
-----------------
RecAA 10
RecAA 11
RecAA 12
RecAB 10
RecAB 11
RecAB 12
RecAB 13
RecAB 14
RecBA 10
RecBA 11
RecBA 14
RecBA 15
RecBB 10
-----------------
要求:
- 表 A 中的记录的 CAT = 3。
- TableA 的 COL1 或 COL2 应在 TableB 的 COL3 中可用。
- COL3 绝对应该在 10、11、12 中有 TYPE,并且应该只有那个 TYPE。
即按照上述要求,
- 在 TableA 中可用的记录中,ID 为 1 和 2 的记录在 TableA 中的 CAT = 3
- 两条记录至少只有 TableB 的 COL3 中的值。 (表A中ID为1的记录在表B中同时具有COL1和COL2,表A中ID为2的记录在表B中具有COL1)
- RecAA 记录的类型为 10、11、12,并且只有 10、11、12。所以 RecAB 是否有 10、11、12 并不重要。但是 RecBA 和 RecBB 都没有 10,11,12 类型。
因此结果应该是:
-------------------------------------
ID COL1 COL2 CAT
-------------------------------------
1 RecAA RecAB 3
-------------------------------------
我尝试了什么:
WITH TEMP AS (SELECT COL3 FROM TableB GROUP BY COL3 HAVING SUM(CASE WHEN TYPE IN ('10','11','12') THEN 1 ELSE 0 END) = 0)
SELECT S.ID, S.COL1, S.COL2, S.CAT FROM TableA S
INNER JOIN TEMP T ON S.COL1 = T.COL3
WHERE S.CAT = 3;
有人可以帮助实现这一目标吗?
【问题讨论】:
标签: oracle