我有一个主表,其中包含我所拥有的数据,还有一个引用表,告诉我主表应该具有哪些值。我想检查主表是否包含所有必需的值,如果没有,则返回缺失的值。 我的主表如下所示:
ID ORG DSIT
-----------
1 A AA
1 B BB
2 A AA
2 B BB
2 C CC
我的引用表如下所示:
ORG DSIT
---------
A AA
B BB
C CC
这意味着主表中的每个 ID 应该有 3 列,其中 (ORG, DSIT) = (A,AA)、(B,BB) 和 (C,CC) 基于引用表。因此,这里 ID 2 没问题,但 ID 1 缺少 ORG 和 DSIT 的 (C,CC) 组合
我尝试了左连接,通过这样做我可以得到 (C,CC) 丢失,但无法判断它属于哪个 ID。我也尝试过 NOT EXIST,但它就是不能以这种方式工作。
我希望看到结果:
ID ORG DSIT
-----------
1 C CC
或者
ID MESSAGE
-----------
1 'C and CC is missing'
提前致谢;如果我能更好地解释它,请告诉我。
最佳答案
这里有一个选项。
示例数据:
SQL> with
2 maint (id, org, dsit) as
3 (select 1, 'A', 'AA' from dual union all
4 select 1, 'B', 'BB' from dual union all
5 select 2, 'A', 'AA' from dual union all
6 select 2, 'B', 'BB' from dual union all
7 select 2, 'C', 'CC' from dual
8 ),
9 reft (org, dsit) as
10 (select 'A', 'AA' from dual union all
11 select 'B', 'BB' from dual union all
12 select 'C', 'CC' from dual
13 )
查询从这里开始;它使用minus
集合运算符返回两个集合之间的差异:一个是您期望的所有值,一个是您拥有的所有值。差异就是你所缺少的。
14 -- all values you expect
15 select b.id, r.org, r.dsit
16 from (select distinct m.id from maint m) b cross join reft r
17 minus
18 -- all values you have
19 select a.id, a.org, a.dsit
20 from maint a;
ID ORG DSIT
---------- --- ----
1 C CC
SQL>
关于sql - 如何在 ORACLE SQL 中找到不在另一个表中的两列的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77589025/