当前位置: 首页 > 面试题库 >

PostgreSQL:如何更新CTE中的行

谷彦君
2023-03-14
问题内容

正在运行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最终 结果

在执行上述操作时,出现以下错误。

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来看,由于热膨胀系数被物化。它们不仅是基础数据的视图。(有时确实很烦人,但事实就是这样)。

你可以:

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术语ctecte1等等。给它们提供有用的描述性名称,以告诉您它们的含义。这就像充满命名的变量程序a通过x…你求助旁边的人谁也维护你的代码,或任何人,不会
喜欢它。



 类似资料:
  • 问题内容: 此查询生成从1到4的数字。 但是,如果我对此进行修改, 它给 错误:“ z”处或附近的语法错误 我在这里做错了什么? 问题答案: 我认为这是因为RECURSIVE是WITH语句的修饰符,而不是常用表表达式的属性,因此您可以像这样使用它:

  • 这里一个非常常见的问题是如何执行upsert,MySQL称之为,标准支持将其作为操作的一部分。 鉴于PostgreSQL不直接支持它(在PG9.5之前),您如何做到这一点?考虑以下几点: 现在假设您要“upsert”元组,,那么新的表内容将是: 在Insert中,关于PostgreSQL中的重复更新?详细讨论了这个主题,但这是关于MySQL语法的替代方法,随着时间的推移,它增加了一些无关的细节。我

  • 问题内容: 正如我已经发现的那样,可以通过执行类似的操作在一个查询中更新多行 特别感谢@Roman Pekar的明确回答。 现在,我正在尝试将这种更新与查询合并到NodeJS中的postgreSQL数据库中。 这是我的代码片段: 我没有收到错误,但是它不会更新我的表,我真的不知道这里出了什么问题。查询代码中可能存在语法错误?我只是在NodeJS pg包中更新时找不到多行查询的任何特定示例 问题答案

  • 这里一个非常常见的问题是如何执行upsert,MySQL称之为,标准支持将其作为操作的一部分。 鉴于PostgreSQL不直接支持它(在PG9.5之前),您如何做到这一点?考虑以下几点: 现在假设您要“upsert”元组,,那么新的表内容将是: 这就是人们在讨论时所谈论的。至关重要的是,在同一表上存在多个事务的情况下,任何方法都必须是安全的--要么使用显式锁定,要么以其他方式防止产生的竞争条件。

  • 我有一个名为employee_Details列的表名称 我使用Java构建JSON数组。具有结构 {[“EMP\u ID”:1,“NAME”:Y,“VECH\u NO”:4587,“SALARY”:1500),“EMP\u ID”:3,“NAME”:Z,“VECH\u NO”:4007,“SALARY”:1800]} 我需要更新表上EMP\U ID存在的完整记录,否则将作为新记录插入。postgr

  • 我有以下不便之处,我想只使用PostgreSQL更新JSON数组的键。我有以下json: 如果“othern”=X,我需要将“othern”更新为另一个数字 (X是我传递给查询的任何数字。例如,如果othern=5,则更新othern)。 这个JSON可能要大得多,所以我需要一些可以在JSON数组中迭代的东西,找到所有与X数匹配的“othern”,并替换为新的。非常感谢。 我尝试了Postgres