gpt4 book ai didi

sql - 使用 WITH 和 CASE 更新 - PostgreSQL

转载 作者:行者123 更新时间:2023-11-29 11:08:53 25 4
gpt4 key购买 nike

我正在尝试将列的值更改为根据其他两个表的信息构建的标题,但是我在获取数据时遇到了麻烦。我目前想对所有条目执行此查询 table 。我在 CASE 上遇到语法错误,我不知道为什么。

UPDATE campaigns AS cmp
SET name = (
WITH ptn AS (SELECT first_name, last_name FROM politicians WHERE id = cmp.politician_id),
rc AS (SELECT office FROM races WHERE id = cmp.race_id)

CASE
WHEN rc.office IS NULL OR rc.office = '' THEN ptn.first_name || ' ' || ptn.last_name
ELSE ptn.first_name || ' ' || ptn.last_name || ' for ' || rc.office
END
)

这是 PostGres 9.4。这是我遇到的错误

ERROR:  syntax error at or near "case"
LINE 5: case
^

********** Error **********

ERROR: syntax error at or near "case"
SQL state: 42601
Character: 189

最佳答案

出现语法错误是因为您的关联子查询无效。您需要在两个公用表表达式之后添加一些 select 语句:

普通表表达式的基本结构是这样的:

with ptn as (...),
rc as (...)
select --<< you are missing this select here

但我认为整个事情可以写得更短更有效(如果我没记错的话)

UPDATE campaigns AS cmp
SET name = CASE
WHEN rc.office IS NULL OR rc.office = '' THEN ptn.first_name || ' ' || ptn.last_name
ELSE ptn.first_name || ' ' || ptn.last_name || ' for ' || rc.office
END
from politicians ptn, races rc
where ptn.id = cmp.politician_id
and rc.id = cmp.race_id

关于sql - 使用 WITH 和 CASE 更新 - PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35142129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com