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フィールドはすべてのレコードで空です。SQLを使用することlocal_site_id=2は可能ですか?

4

2 に答える 2

4

row_number()これは、ウィンドウ関数の典型的な使用例です。メインテーブルがTであるとすると、このクエリはpostgresql8.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 に答える
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 に答える