4

我在 postgres 中有一张这样的表:

Id    Name    local_site_id    local_id
1     A       2                
2     B       2
3     C       1
4     D       2
5     E       1

如何使用 SQL 查询将表更新为此:

Id    Name    local_site_id    local_id
1     A       2                1
2     B       2                2
3     C       1                
4     D       2                3
5     E       1                

现在,所有记录的 local_id 字段都是空的。我想使用从 1 开始的递增数字更新 local_id 值,仅适用于具有local_site_id=2是否可以使用 SQL 的行?

4

2 回答 2

4

我相信这应该做你想做的事,否则请告诉我:

UPDATE table_name
SET    local_id = row
FROM
(
    SELECT *, 
           ROW_NUMBER() OVER (PARTITION BY local_site_id ORDER BY name) AS row
    FROM   table_name
    WHERE  local_site_id = 2
) AS Q
WHERE Q.id = table_name.id;
于 2012-08-10T08:53:40.017 回答
4

row_number()这是窗口函数的典型用例。假设你的主表是 T,这个查询应该适用于 postgresql 8.4 或更新版本:

update T set local_id=s.rn 
from (select id,row_number() over(order by id) as rn from T where local_site_id=2) s
 where T.id=s.id;
于 2012-08-10T08:55:45.263 回答