sql >> Database >  >> RDS >> PostgreSQL

Postgres UPDATE met behulp van de rangvensterfunctie

Aangezien u geen unieke sleutel heeft, gebruikt u 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;

Let op, row_number() is misschien beter dan rank() aangezien de eerste nooit duplicaten geeft.



  1. Tuple naar lijst - Python / PostgreSQL-retourtype van SETOF-record

  2. Uitleg van een BLOB en een CLOB

  3. Hoe voer ik meerdere CASE WHEN-voorwaarden uit met SQL Server 2008?

  4. Waarom is SQL NOT IN zo traag?