SQLiteの - ROW_NUMBERからの結果に基づいて、同じテーブルの更新カラム、()

Cheokヤンチェン:

いくつかの試行の後、私は生成することができたrow_number()私が望んだ値を持つ列を。

select "order", row_number() over win - 1, type, title, body, searched_string from plain_note 

WINDOW win AS (
    order by 
        title desc,
        case when type = 0 then body else searched_string end desc
)

ここでは、画像の説明を入力します。

今、私は上書き全体に希望の「注文」からの値で、コラム「ROW_NUMBER()に勝利- 1」

例えば、

  • 1行目では、私は、更新したいと思い、「順序」値0とカラム(元の値13)。
  • 2行目では、私は、更新したいと思い、「順序」値1とカラム(元の値14)。
  • ... 等々。

私が知っている可能性があり、そうするための正しいSQLiteのステートメントは何ですか?ありがとうございました。


私がこれまでにしようとしたアプローチがあります

update plain_note set "order" = (
    select row_number() over win - 1 from plain_note 

    WINDOW win AS (
        order by 
            title desc,
            case when type = 0 then body else searched_string end desc
    )
);

しかし、これは作るALLの1行目持つ、「オーダー」の行を- 「1 ROW_NUMBER()勝利」 0の値を、。

離れて渡します:

あなたのコードは、テーブルの行とサブクエリの行の間のリンクが含まれていません。
私はこのような更新方法を記述します。

with cte as (
  select *, row_number() over win - 1 as rn from plain_note

  window win as (order by 
    title desc,
    case when type = 0 then body else searched_string end desc
  )    
)
update plain_note set "order" = (select rn from cte where "order" = plain_note."order");

列の値のこの意志の仕事は"order"独特です。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377656&siteId=1