2016-12-09 24 views
1

「位置」という列を持つ「カード」という表があります ROW_NUMBERを使用して各レコードの行番号と同じになるように '位置'を更新または設定する方法はありますか)?ROW_NUMBER()を使用したSQL更新レコード

私はこの文を使用して正しい値を記録を照会して取得することができています:

"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が含まれます。

関連する問題