1

我对来自 Object-Relational dtb 的 Lab 有点卡住了。我有这个层次结构:

SUPERTYPE EMPLOYEE_TYPE3
------------------------------
empno number(4)
ename varchar(10),
job varchar(9),
hiredate date,
sal number(7, 2),
deptno number(2)


SUBTYPE MANAGER_TYPE3
------------------------------
office varchar(6),
car varchar(10)


SUBTYPE SALESMAN_TYPE3
------------------------------
comm number(7, 2)


SUBTYPE STAFF_TYPE3
------------------------------
office varchar(6)

我为employee_type3. 我需要做的是创建一个ALL_EMPLOYEES包含所有员工子类型的数据的视图。视图应包含每个子类型的所有列。很明显,在某些列中将是空值。

有谁知道如何做这样的看法?我认为联合在这里没用,因为我的列数不同。

非常感谢您的帮助!

4

2 回答 2

0

我找到了解决方案,所以如果有人对类似问题感兴趣,你可以在这里找到一些灵感。解决方案:

create view all_employees 
(
 empno,
 ename,
 job,
 hiredate,
 sal,
 comm,
 deptno,
 office,
 car
) 
as 
select empno,
       ename,
       job,
       hiredate,
       sal,
       null,
       deptno,
       office,
       car 
  from manager 
union 
select empno,
       ename,
       job,
       hiredate,
       sal,
       comm,
       deptno,
       null,
       null 
  from salesman 
union 
select empno,
       ename,
       job,
       hiredate,
       sal,
       null,
       deptno,
       office,
       null 
  from staff

只需要添加null,其中没有为子类型定义列。

于 2013-01-15T09:37:12.270 回答
0

您确实使用了联合(但 a UNION ALL)。

您对所有行进行空扩展,使它们具有相同的结构:

select Col1, NULL as Col2, 1 as Discriminator FROM T1 union all
select NULL as Col1, Col2, 2 as Discriminator FROM T2

请注意,我包含了一个鉴别器,因此您可以过滤类型(甚至确定它)。

于 2013-01-11T22:01:28.760 回答