sql - 您如何根据连接哪个表以创建行来将文字放入结果 sql 结果集中?

标签 sql oracle oracle11g

我有 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/

相关文章:

由于 "duplicate entry",删除后mysql插入失败

java - 在 Java 中对对象列表中的项目进行分组

日期之间的 SQL/Oracle 聚合桶

sql - 索引不能提高性能,有时会使性能变差

java - JDK 6 : Is there a way to run a new java process that executes the main method of a specified class

sql - 这种情况需要一个 SQL 查询

mysql - SQL 子查询比外部查询获取更多行

sql - 在 Windows 7 64 位上找不到提供程序

java - Jboss EAP 6.3部署错误: oracle datasource not found

mysql - MySQL 中何时使用单引号、双引号和反引号