正在运行PostgreSQL 9.2。 下面给出的是我 巨大和丑陋 的样本 __query
PostgreSQL 9.2
query
with cte as( select ....... from aTable ),cte1 as ( select ..... from bTable inner join cte using(anID) ),update_cte as( update cte set aField=(select somthing from cte1) ) select * from cte
我需要创建一个view最终 结果 。
view
在执行上述操作时,出现以下错误。
ERROR: relation "cte" does not exist
我知道在做坏事。 希望您能从上述 查询中 了解要实现的目标。 因此,请提出其他替代方法。
非常感谢您的答复。
注意:实际查询
with cte as( select ....... from aTable ),update_cte as( update cte set aField=(select somthing from cte1) )
你不能那样做。
一个UPDATE可以不引用PostgreSQL中CTE来看,由于热膨胀系数被物化。它们不仅是基础数据的视图。(有时确实很烦人,但事实就是这样)。
UPDATE
你可以:
CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable; UPDATE someview SET afield = ...
如果你想; 可以在支持自动更新视图的新PostgreSQL版本上使用。我认为9.2可以。
否则,我认为您想要的是:
WITH cte1 as ( select ..... from bTable inner join cte using(anID) ) update aTable set aField=(select somthing from cte1) WHERE ... where clause from cte ... RETURNING *;
但实际上,请 不要 称呼您的CTE术语cte,cte1等等。给它们提供有用的描述性名称,以告诉您它们的含义。这就像充满命名的变量程序a通过x…你求助旁边的人谁也维护你的代码,或任何人,不会 不 喜欢它。
cte
cte1
a
x