Postgres:SELECT 语句的更新和 return 结果
Postgres: UPDATE and return result of SELECT statement
我的 table 可能是这样的:
created
last_read
data
2021-10-15 15:51:50
NULL
BINARY
2021-10-14 12:22:13
NULL
BINARY
2021-10-13 06:32:44
2021-10-14 16:44:08
BINARY
2021-10-12 16:05:07
2021-10-13 17:21:09
BINARY
我想做什么: SELECT x 行按创建的 ASC 和 last_read
ASC 排序,并设置时间 last_read
select 将行编辑到 NOW()
。
SELECT 看起来像这样:
SELECT data
FROM my_table
ORDER BY last_read NULLS FIRST, created
LIMIT 3
然后我将获取结果集并应用以下 UPDATE 语句:
UPDATE my_table
SET last_read = NOW()
问题: 执行上述 和 returns returns 结果的查询看起来如何=47=]?
如果返回的数据在UPDATE之前或之前都没有关系,因为我只有select数据列。
我试过了
UPDATE my_table
SET last_read = NOW()
RETURNING data
但是,我无法为此提供 ORDER BY 和 LIMIT。因此,它不会产生预期的结果,但会更新 returns 所有行。
我可能还会想到使用子查询来更新基于SELECT 的行。但是这些行将不会作为结果返回。
WITH cte AS (
SELECT *
FROM mytable
ORDER BY last_read NULLS FIRST, created
LIMIT 3
)
UPDATE mytable t
SET last_read = NOW()
FROM cte
WHERE cte.created = t.created
RETURNING t.data;
我的 table 可能是这样的:
created | last_read | data |
---|---|---|
2021-10-15 15:51:50 | NULL | BINARY |
2021-10-14 12:22:13 | NULL | BINARY |
2021-10-13 06:32:44 | 2021-10-14 16:44:08 | BINARY |
2021-10-12 16:05:07 | 2021-10-13 17:21:09 | BINARY |
我想做什么: SELECT x 行按创建的 ASC 和 last_read
ASC 排序,并设置时间 last_read
select 将行编辑到 NOW()
。
SELECT 看起来像这样:
SELECT data
FROM my_table
ORDER BY last_read NULLS FIRST, created
LIMIT 3
然后我将获取结果集并应用以下 UPDATE 语句:
UPDATE my_table
SET last_read = NOW()
问题: 执行上述 和 returns returns 结果的查询看起来如何=47=]?
如果返回的数据在UPDATE之前或之前都没有关系,因为我只有select数据列。
我试过了
UPDATE my_table
SET last_read = NOW()
RETURNING data
但是,我无法为此提供 ORDER BY 和 LIMIT。因此,它不会产生预期的结果,但会更新 returns 所有行。
我可能还会想到使用子查询来更新基于SELECT 的行。但是这些行将不会作为结果返回。
WITH cte AS (
SELECT *
FROM mytable
ORDER BY last_read NULLS FIRST, created
LIMIT 3
)
UPDATE mytable t
SET last_read = NOW()
FROM cte
WHERE cte.created = t.created
RETURNING t.data;