1

我希望能够根据在 ('[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 回答