Jua*_*eza 5 sql postgresql common-table-expression
我尝试使用CTE
WITH cte as (
SELECT myFieldName,
row_number() over (order by gps_device_id) as rn
FROM tracker.gps_devices
)
UPDATE cte
SET cte.myFieldName = CASE WHEN cte.rn % 3 = 0 THEN '0'
WHEN cte.rn % 3 = 1 THEN '1'
WHEN cte.rn % 3 = 2 THEN '2'
END
Run Code Online (Sandbox Code Playgroud)
但是出现了以下错误。
错误:关系“ cte”不存在
像我看起来可以做的INSERT和DELETE以后WITH,但UPDATE只有CTE里面,是正确的?我确定我做了类似的事情,但是也许在不同的数据库中。
https://www.postgresql.org/docs/9.6/static/queries-with.html
因此,即使在工作非常混乱的情况下,我也有任何建议吗?
UPDATE tracker.gps_devices g
SET g.myFieldName = CASE WHEN t.rn % 3 = 0 THEN '0'
WHEN t.rn % 3 = 1 THEN '1'
WHEN t.rn % 3 = 2 THEN '2'
END
FROM (SELECT gps_device_id,
myFieldName,
row_number() over (order by gps_device_id) as rn
FROM tracker.gps_devices) as t
WHERE g.gps_device_id = t.gps_device_id
Run Code Online (Sandbox Code Playgroud)
您可以使用cte进行更新,例如(假设id是主键):
with cte as (
select
id,
my_field_name,
row_number() over (order by gps_device_id) as rn
from gps_devices
)
update gps_devices
set my_field_name = (rn % 3)::text
from cte
where gps_devices.id = cte.id;
Run Code Online (Sandbox Code Playgroud)
您可以插入,更新或删除表(视图)的行,而不是查询的结果集。