2016-12-09 106 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條款。