如何根据定义的where子句顺序依次更新字段

时间:2012-09-11 18:32:40

标签: postgresql

我希望能够根据它在('[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]');

1 个答案:

答案 0 :(得分: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;