是否可以在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。
有没有办法强制视图在运行时返回特定字段,而这些字段在创建视图时不存在?
答案 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语句,添加了我需要的字段并使用了视图的代码而无需创建新视图(创建新视图意味着将其外包给另一家公司,这将花了我们钱..)
谢谢:)