使用公共表达式,我尝试完成以下操作。
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
但是出现了以下错误。
错误:关系“cte”不存在
看起来我可以在 WITH
之后执行 INSERT
和 DELETE
操作,但是只能在 cte 内部执行 UPDATE
操作,这是正确的吗?我确定我做过类似的操作,但可能是在另一个数据库中。
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