1

where in('[john2]。[john2]'、'[john3]。[john3]'、'[john]。[john]に配置された順序に基づいて、フィールドを順番に更新できるようにしたい。 ]')句ですが、関連付けられた順序に基づいて更新されていないようです(以下のSQLを参照)。事前定義されたwhere句の順序に基づいてフィールドを順番に更新するにはどうすればよいですか?

ジョン

drop sequence temp_seq;
 create temp sequence temp_seq;

update gis_field_configuration_bycube
 set seq_in_grid = nextval('temp_seq')
 where cube = 'Instruments' and level_unique_name in ('[john2].[john2]','[john3].[john3]','[john].[john]');
4

1 に答える 1

1

厳密な意味での値のリストではなく、セットを定義するため、IN()構造では順序は関係ありません。代わりにVALUES句を使用する必要があります。

また、Postgres 8.4以上を想定row_number()すると、一時的なシーケンスを作成するよりも面倒ではありません。

動作するものは次のとおりです。

update gis_field_configuration_bycube
 set seq_in_grid = rn
from 
(select  row_number() over () as rn , string from
  (values ('[john2].[john2]'),('[john3].[john3]'),('[john].[john]')) as v(string)
) as subquery
 where cube = 'Instruments'
 and level_unique_name=subquery.string;
于 2012-09-11T20:58:23.940 に答える