我有 3 个表,其中一个代表“超类型”,带有一个 ID 列。另外两个表都是子类型,一个 ID 列是超类型表的外键,加上一个特定于子类型的列。
我想要一个返回所有数据的查询,以及一个我可以用作鉴别器的列,它告诉我该行来自哪个表。
因此,例如,我该如何修改:
SELECT * from SUPER S
left outer join SUB_1 S1 on S.ID = S1.ID
left outer join SUB_2 S2 on S.ID = S2.ID
这给了我这个:
ID SUB_COL_1 SUB_COL_2
==== ========= =========
0001 value x NULL
0002 value y NULL
0003 NULL value z
进入将添加带有一些硬编码文字值的鉴别器列的东西,如下所示:
ID DISCRIMINATOR SUB_COL_1 SUB_COL_2
==== ============= ========= =========
0001 SUBTYPE_1 value x NULL
0002 SUBTYPE_1 value y NULL
0003 SUBTYPE_2 NULL value z
我不允许以任何方式修改数据模型。事后我也无法通过以编程方式测试 NULLS 来进行任何后处理。我需要按原样处理表格,并生成上面显示的确切结果集。我正在使用 Oracle 11g,如果这对答案有任何影响。