我的表可能如下所示:
| 創建 | 上次閱讀 | 資料 |
|---|---|---|
| 2021-10-15 15:51:50 | 空值 | 二進制 |
| 2021-10-14 12:22:13 | 空值 | 二進制 |
| 2021-10-13 06:32:44 | 2021-10-14 16:44:08 | 二進制 |
| 2021-10-12 16:05:07 | 2021-10-13 17:21:09 | 二進制 |
我想要做什么: SELECT x 行按創建的 ASC 和last_readASC排序last_read,并將所選行的時間設定為NOW().
SELECT 看起來像這樣:
SELECT data
FROM my_table
ORDER BY last_read NULLS FIRST, created
LIMIT 3
然后我將獲取結果集并應用以下 UPDATE 陳述句:
UPDATE my_table
SET last_read = NOW()
問題:查詢如何執行上述兩種操作并回傳 SELECT 的結果?
如果回傳的資料在 UPDATE 之前或之前并不重要,因為我只選擇資料列。
我試過了
UPDATE my_table
SET last_read = NOW()
RETURNING data
但是,我無法為此提供 ORDER BY 和 LIMIT。因此,它不會產生所需的結果,而是更新并回傳所有行。
我也可能會考慮使用子查詢來更新基于 SELECT 的行。但是這些行不會作為結果回傳。
uj5u.com熱心網友回復:
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;
資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331686.html
標籤:sql PostgreSQL sql更新
上一篇:日期差異的情況
下一篇:如何使用查詢構建器從子查詢更新?
