SQLite - Atualização coluna da mesma tabela, com base em resultado de row_number ()

Cheok Yan Cheng:

Depois de várias tentativas, eu era capaz de gerar uma row_number()coluna com o valor que eu desejava.

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
)

digite descrição da imagem aqui

Agora, eu gostaria de toda sobrescrever "ordem" da coluna, com o valor de "row_number () ao longo de vitória - 1"

Por exemplo,

  • Na primeira fila, eu gostaria de atualizar a "ordem" de coluna (valor original 13) com o valor 0.
  • Na 2ª fila, eu gostaria de atualizar a "ordem" de coluna (valor original 14) com valor 1.
  • ... e assim por diante.

Posso saber, qual é a declaração SQLite correta de fazê-lo? Obrigado.


A abordagem que eu tinha tentado até agora é

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
    )
);

No entanto, isso fará com que TODOS fileiras de "ordem", tendo 1ª fila do "row_number () ao longo de vitória - 1" valor, que é 0.

passarão:

Seu código está faltando um elo entre linhas da tabela e linhas da subconsulta.
Eu ia escrever o método de atualização como esta:

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");

Este trabalho vontade dos valores na coluna "order"são únicos.

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=377655&siteId=1
Recomendado
Clasificación