我有 3 个表,一个表示“父类(super class)型”,带有一个 ID 列。另外两个表都是子类型,有一个 ID 列是父类(super class)型表的外键,还有一个特定于子类型的列。
我想要一个返回所有数据的查询,以及一个我可以用作鉴别器的列,告诉我该行来自哪个表。
例如,我该如何修改:
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,如果这对答案有任何影响的话。
最佳答案
您可以添加:
CASE IF S1.ID IS NULL THEN 'SUBTYPE_1' ELSE 'SUBTYPE_2' END AS DISCRIMINATOR,
在 SELECT
子句的开头。
关于sql - 您如何根据连接哪个表以创建行来将文字放入结果 sql 结果集中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751647/