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