PostgreSQL:如何在CTE中更新行
发布时间:2020-12-13 18:05:38 所属栏目:百科 来源:网络整理
导读:我正在运行PostgreSQL 9.2. 下面给出的是我巨大而丑陋的样本 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 c
我正在运行PostgreSQL 9.2.
下面给出的是我巨大而丑陋的样本 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 我需要创建一个包含最终结果的视图. 执行上述操作时会出现以下错误. ERROR: relation "cte" does not exist 我知道我在做一些坏事.你可以理解我在上面的查询中想要实现的目标. 回复非常感谢. 注意:the actual query with cte as( select ....... from aTable ),update_cte as( update cte set aField=(select somthing from cte1) ) 你不能这样做. 由于CTE具体化,UPDATE可能不会引用PostgreSQL中的CTE术语.它们不仅仅是对底层数据的看法. (这有时真的很烦人,但就是这样). 您可以: 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的变量……下一个必须维护代码的人,或者你要求帮助的任何人,都不会喜欢它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |