sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres UPPDATERING med rankningsfönsterfunktion

Eftersom du inte har en unik nyckel, använd ctid :

update medias m
    set sort_order = new_sort_order
    from (
        select 
            ctid,
            owner_user_id, 
            sort_order, 
            row_number() over w as new_sort_order 
        from medias 
        where visible
        window w as (partition by owner_user_id order by sort_order asc, created_at asc)
    ) s
    where m.ctid = s.ctid;

Obs, row_number() kan vara bättre än rank() eftersom den första aldrig ger dubbletter.



  1. Kombinera kapslade loop-frågor till överordnat arrayresultat - pg-promise

  2. Hur man använder förberedda satser i frågor med en IN-sats i PHP

  3. Hur gör man begränsningar för främmande nyckel pålitliga?

  4. sqlite rad-ID matchar inte listvy - ANDROID