将视图加入另一个表

时间:2017-05-25 08:09:22

标签: postgresql view

是否可以在SQL中使用另一个表加入视图?如果是这样,怎么样?

我对Oracle db有一个查询,它有特定的字段。我需要在PostgreSQL上重新创建相同的查询,但PostgreSQL查询中的一些数据来自视图......并且该视图缺少信息。这是一个相当复杂的视图,所以我现在不想使用它。

例如,在Oracle中我这样做:

SELECT
d.dos_id,
trunc(d.dos_creation, 'MM') as Cohorte,
sum(v.ver_etude + v.ver_direct) as encaissé
from t_dossier d
left outer join v_versement v
on v.dos_id = d.dos_id

在Postgres中,我正在使用一个视图。但视图不返回“dos_id”,因此我无法在视图中明确加入v_versement。

有没有办法强制视图在运行时返回特定字段,而这些字段在创建视图时不存在?

2 个答案:

答案 0 :(得分:2)

你不能强迫它

  

在运行时返回特定字段,这些字段在创建时不存在   视图

您可以使用限制创建或替换它:

https://www.postgresql.org/docs/current/static/sql-createview.html

  

CREATE OR REPLACE VIEW类似,但是如果是同名视图   已经存在,它被替换了。新查询必须生成相同的内容   由现有视图查询生成的列(即,   相同的列名称具有相同的顺序和相同的数据类型),但是   它可能会在列表末尾添加其他列。计算   产生列的输出可能完全不同。

示例:

t=# create view v2 as select now();
CREATE VIEW
Time: 36.488 ms
t=# create or replace view v2 as select now(),current_user;
CREATE VIEW
Time: 8.551 ms
t=# create or replace view v2 as select now()::text,current_user;
ERROR:  cannot change data type of view column "now" from timestamp with time zone to text
Time: 0.430 ms

答案 1 :(得分:0)

我想我没有意识到我可以在不创建视图的情况下实际使用视图......

所以我编辑了构成视图的SQL语句,添加了我需要的字段并使用了视图的代码而无需创建新视图(创建新视图意味着将其外包给另一家公司,这将花了我们钱..)

谢谢:)