2017-06-06 8 views
0

私が持っているテーブルの1つのビューを作成しようとしています。ビュー内の列の1のために、私は私が持っているテーブルから値を読み取るしようとしています:何らかの条件に基づいて複数のテーブルからカラム値を読み込む -

表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)に対する2つの外部キー参照をそれぞれ持つメインテーブルです。表Aの各行について、2つの参照のうちの1つ(b_idまたはc_id)のみが取り込まれます。

私のタスクは、テーブルAのためのビューを作成することです、次の列がありますされ、V_Aを言う:

ビューV_A:

code  code_table 
64   B 
98   C 
26   D 

上記のビューでは、私が最初に確認する必要があります表Aの各行は、外部キー参照のうちのどの列に「列」のコードを読み込まなければならないかに基づいて作成され、「コード表」の列には「コード」列が挿入されます。

私は簡単なビューを作成することができましたが、これは私にとっては少し難解です。私はのケースを使うことができるかどうかをチェックしていました...と同じですが、ちょっと複雑になった点の後に。私はのinformation_schemaテーブルからポストグルのテーブル名を読むこともできます。だから私は解決策のビットと断片を持っているが、それをすべて一緒にする方法を理解していない。

誰かが正しい方向に向かうことができますか?

ありがとうございます!あなたが一つのテーブルいっぱいまたはその他のいずれかを持っている場合にのみ、それが動作します。もちろん、

答えて

1

- 両方の物語は、キーが一致しているとき、それは競合を解決しない:私はより多くを持っている場合、どのような返信用

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つのテーブルを読み込みます。たとえば、2つ以上のテーブルに対して2つ以上の外部キー参照があるとします。 –

+0

あなたはビューをドロップして別のテーブルを作成します - テーブルを追加するには –

+0

しかし、あなたの答えは2つの子テーブルが2つある場合にのみ有効です。質問を編集しました。 –

関連する問題