我对来自Object-Relational dtb的实验室感到有些困惑。我有这种层次结构:
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
。视图应包含每个子类型的所有列。很明显,在某些列中将为空值。
有谁知道如何做这样的观点?我认为联盟在这里没用,因为我的列数不同。
非常感谢你的帮助!
答案 0 :(得分:0)
你确实使用了一个联合(但是UNION ALL
)。
您 null-extend 所有行,因此它们具有相同的结构:
select Col1, NULL as Col2, 1 as Discriminator FROM T1 union all
select NULL as Col1, Col2, 2 as Discriminator FROM T2
请注意,我包含了一个鉴别器,因此您可以对类型进行过滤(甚至确定它)。
答案 1 :(得分: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,其中没有为子类型定义列。