SQLite - обновить столбец той же таблицы на основе результата row_number () - PullRequest
0 голосов
/ 31 марта 2020

После нескольких попыток я смог сгенерировать столбец 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
)

enter image description here

Теперь я хотел бы перезаписать весь столбец "order" , используя значение из "row_number () вместо win - 1"

Например,

  • В 1-й строке я хотел бы обновить "order" столбец (исходное значение 13) со значением 0.
  • Во 2-й строке я хотел бы обновить «порядок» столбец (исходное значение 14) со значением 1.
  • ... и т. д.

Могу я узнать, что является правильным 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-й ряд "row_number () сверх выигрыша - 1" , значение которого равно 0.

1 Ответ

1 голос
/ 31 марта 2020

В вашем коде отсутствует связь между строками таблицы и строками подзапроса. Я бы написал метод обновления следующим образом:

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", уникальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...