根据某些条件从多个表中读取列值 - postgreSQL

时间:2017-06-06 08:24:59

标签: database postgresql views pgadmin-4

我正在尝试为其中一个表创建一个视图。对于视图中的一个列,我试图从我拥有的表中读取值:

表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_table”列将具有我填写“代码”列的表的名称。

我能够创建简单的视图,但这对我来说有点棘手。我正在检查是否可以使用 case ... when 同样但是在一点之后变得有点复杂。我还可以从 information_schema 表中读取postgres中的表名。所以我有点解决方案,但不明白如何将它们放在一起。

有人能指出我正确的方向吗?

谢谢!

1 个答案:

答案 0 :(得分: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)