postgresql 使用UPDATE关键字更新CTE

kb5ga3dv  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(175)

我目前通过DBeaver使用PostgreSQL
在我的"gia_su_pro"表中,在"course_id"字段中,当前有一个单元格包含多个课程ID,并由段落分隔符¶(Pilcrow符号)分隔。我想分隔课程ID并为其创建一个新记录,其值与之前相同,但不想更改"gia_su_pro"表中的原始数据
我是这么做的:

  • 我把pilcrow符号改成逗号,这样我就可以把它分开,但在改变的步骤上卡住了。
  • 我创建了一个名为"gia_su_pro_virtual"的CTE,其中包含"gia_su_pro"表中的所有数据,然后进行更新,将Pilcrow符号更改为逗号。
  • 结果返回错误关系"gia_su_pro_virtual"不存在

我检查了PostgreSQL文档,他们说我可以使用带有UPDATE关键字的CTE,所以我不知道我做错了什么。
请帮助我分离课程ID,并使用与以前相同的值为其创建新记录,但不要更改"gia_su_pro"表中的原始数据
下面是我的代码:

with gia_su_pro_virtual as (
select *
from gia_su_pro gsp)
update gia_su_pro_virtual gsv
set gsv.coure_id = REPLACE(gsv.course_id, E'\u00B6', ',')

以下是错误结果:(https://i.stack.imgur.com/FnUhG.png
这里是我从postgre网站上读到的文档(https://i.stack.imgur.com/8EzBO.png

egmofgnx

egmofgnx1#

Postgres不支持可更新的公共表表达式(尽管一些其他数据库,如SQL Server,确实支持它们)。在这种特殊情况下,您应该直接对表进行更新:

UPDATE gia_su_pro_virtual
SET coure_id = REPLACE(course_id, E'\u00B6', ',');

相关问题