2016-12-09 80 views
1

我有一个名为'卡',其中有一个名为'位置'列的表 我怎样才能更新/设置'位置'等于每个记录的行号,使用ROW_NUMBER )?SQL更新记录与ROW_NUMBER()

我能够查询记录,并获得使用这种说法正确的值:

"SELECT *, ROW_NUMBER() OVER() as position FROM cards" 

所以,我想这样做,但它已经在数据库中更新新值。

+0

SQLite不支持'ROW_NUMBER()',所以这个问题才有意义Postgres的。 –

回答

4

让我假设cards都有一个主键。然后你可以使用join

update cards c 
    set position = c2.seqnum 
    from (select c2.*, row_number() over() as seqnum 
      from cards c2 
     ) c2 
    where c2.pkid = c.pkid; 

我要指出的是,over()看起来很奇怪,但Postgres的确允许它。通常会包含order by条款。