2017-06-06 102 views
0

我正在嘗試爲其中一個表創建視圖。在視圖中的列中的一個,我試圖讀取來自表I的值有:根據某些條件從多個表中讀取列值 - postgreSQL

表A:

id b_id c_id d_id 
1  1 
2   1 
3      1 

表B:

id code 
1  64 

表C:

id code 
1  98 

表d:

id  code 
1  26 

在上面的表中,A是我的主表,它有兩個分別對錶B和C(b_id和c_id)的外鍵引用。並且對於表A中的每一行,只有兩個引用(b_id或c_id)中的一個將被填充。

我的任務是創建表A中的觀點,說V_A,這將有以下幾列:

查看V_A:

code  code_table 
64   B 
98   C 
26   D 

在上面的觀點,我不得不爲第一次檢查表A中的每一行都填充了哪個外鍵引用,基於此我必須讀取'code'列,而'code_table'列將具有我填充'code'列的表的名稱。

我已經能夠創建簡單的視圖,但這對我來說有點棘手。我正在檢查是否可以使用的情況...當爲相同,但在一個點變得有點複雜之後。我也可以從information_schema表中讀取postgres中的表名。所以我有一些解決方案,但不知道如何把它放在一起。

有人能指出我正確的方向嗎?

謝謝!

回答

1

當然,當你有一張桌上擺滿或其他IT只會工作 - 它並沒有解決衝突當兩個故事要有匹配的密鑰:

t=# create view _a as select coalesce(b.code,c.code,d.code) code, case when b.id is not null then 'B' when c.id is not null then 'C' when d.id is not null then 'D' end from a 
left outer join b on b.id = b_id 
left outer join c on c.id = c_id 
left outer join d on d.id = d_id; 
CREATE VIEW 
t=# select * from _a; 
code | case 
------+------ 
    26 | D 
    98 | C 
    64 | B 
(3 rows) 
+0

感謝您的答覆,如果我有更多的比兩張表讀取。例如,有兩個更多的外鍵引用2個表? –

+0

你放棄了視圖,並創建另一個 - 爲更多的表加入 –

+0

但是你的答案只會有效,如果我有兩個兩個子表。編輯了這個問題。 –

相關問題