我正在处理表格,为了在此处显示,它们看起来像以下内容:
A
A_ID | Clob_Col
1 | value
2 | value
3 | null
4 | value
5 | null
6 | value
7 | value
8 | null
9 | value
10 | value
B
B_ID |A_ID | C_ID
10 | 1 | 20
11 | 2 | 20
12 | 6 | 21
13 | 7 | 22
14 | 8 | 22
15 | 9 | 23
C
C_ID
20
21
22
23
24
25
所有表格都有更多的列。
我希望编写一个查询,它将从三个表中返回值,但排除与 Table C 中某些值相匹配的记录(NOT IN)。 我的问题是在使用 NOT IN 子句时从 Table A 返回不链接到 Table B 的值。
例如:
SELECT a.A_ID, a.Clob_Col, b.B_ID, c.C_ID
from A a
LEFT JOIN B b on a.A_ID=b.A_ID
LEFT JOIN C c on b.C_ID=c.C_ID
WHERE a.AID >= 2
AND a.AID <= 7
AND c.C_ID NOT IN (22, 23, 24)
最后一行代码将使B表中只有b_BID = 10,11或12的记录保留下来。
这些记录与A表中的以下记录相对应:a.ID = 1,2和6。
第一个条件进一步限制了我们最终结果为a.ID = 2和6。
最终结果如下:
A_ID |Clob_Col |B_ID |C_ID
2 |value |11 |20
6 |value |12 |21
但是我也想返回不与表B关联的A表记录 - a.ID 3、4和5,因此我期望我的结果是:
A_ID |Clob_Col |B_ID |C_ID
2 |value |11 |20
3 |null |null |null
4 |value |null |null
5 |null |null |null
6 |value |12 |21
注意:我包括Clob值的原因是有人建议选择所有记录,然后对那些c.C_ID IN (22, 23, 24)
的记录执行MINUS操作。
这似乎是合理的,但是Oracle不允许涉及Clob列的MINUS操作。