2013-01-11 77 views
1

我有點困惑於我的實驗室從對象關係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

你確實使用聯盟(但是一個UNION ALL)。

空擴展所有行,使他們具有相同的結構:

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

注意,我包括鑑別,所以你可以在類型過濾(甚至確定它)。

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 

只需要添加空值,其中未定義的列爲子類型。