2017-03-23 44 views
0

後期編輯不同的表查看數據:PostgreSQL的 - 基於約束的表的一個

所以我有以下以下表格中,我試圖從UniMember從表中顯示的字段名稱,電話基於Afl中的結束字段爲空的約束,從表Afl的工作人員和起始字段。我是非常新的Postgresql,基本上已經停留了兩天。我嘗試了很多不同的查詢,但一直無法顯示。

預計產量應該沿線:

名稱|電話|起始

謝謝!

create table UniMember (
    id   integer, -- PG: serial 
    unswid  integer unique, -- staff/student id (can be null) 
    password ShortString not null, 
    family  LongName, 
    given  LongName not null, 
    title  ShortName, -- e.g. "Prof", "A/Prof", "Dr", ... 
    sortname LongName not null, 
    name  LongName not null, 

    primary key (id) 
); 

create table Staff (
    id   integer references People(id), 
    office  integer references Rooms(id), 
    phone  PhoneNumber, -- full number, not just extension 
    primary key (id) 
); 

create table Afl (
    staff  integer references Staff(id), 
    orgUnit  integer references OrgUnits(id), 
    role  integer references Staff_roles(id), 
    isPrimary boolean, -- is this role the basis for their employment? 
    starting date not null, -- when they commenced this role 
    ending  date, -- when they finshed; null means current 
    primary key (staff,orgUnit,role,starting) 
); 
+0

您應該發佈您的表結構以及您嘗試的任何嘗試查詢。 –

+0

請** [編輯] **您的問題,並根據該數據添加一些示例數據和預期輸出。 [**格式化文本**](http://stackoverflow.com/help/formatting)請,[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not上傳圖片的代碼時這樣問/ 285557#285557) –

回答

0

嘗試尋找到內部連接,非常需要看到所有的表,但你需要的表(中小學鍵)之間的公共領域中的表連接在一起,並顯示您需要的數據。

0

您應該創建一個視圖,您可以使用該視圖以正確的方式輸出數據。你可以這樣做,如下所示。

create view test as select name, phone, starting 
from unimember a, staff b, afl c 
where b.id = c.staff 

現在你可以在視圖中選擇:

Select * from test; 

在輸出更清晰的定義將是巨大的下一次你問一個問題。

Regards

+0

謝謝你。我試過這個,但是輸出結果太長了。通常需要一段時間嗎? – runswmily