我在postgres中有一个表不断更新。如果有5行可用,我想选择前5行,并更新与之关联的标志。
At first the table looks like this
id name flag
11 ss -
22 aa -
12 bb -
13 cc -
14 dd -
23 ab -
24 cd -
25 ee -
首次选择5行后,表格应如下所示
id name flag
11 ss Y
22 aa Y
12 bb Y
13 cc Y
14 dd Y
23 ab -
24 cd -
25 ee -
下一个选择不应该发生,因为还没有剩下5行
答案 0 :(得分:0)
窗口函数可用于计算结果集中的所有行。尝试像
这样的东西WITH unflagged AS (
SELECT id FROM (
SELECT id, count(*) over() AS cnt
FROM your_table
WHERE flag IS NULL
) WHERE cnt >= 5
LIMIT 5
)
UPDATE your_table SET flag = Y
WHERE id IN (SELECT * FROM unflagged)