代码之家  ›  专栏  ›  技术社区  ›  user3541631

如果每个对象/项的数字(4)以上,则删除关系

  •  0
  • user3541631  · 技术社区  · 6 年前

    我有两个实体项目和图像。一个项目可以有多个图像。

    如果一个项目有4个以上的图片,我想删除上面的图片,按ID排序

    结构:

    Item
    
    id | name
    1    a
    2    b
    3    c
    
    Image
    
    id | item_id
    1    1
    2    1 
    3    2
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Lukasz Szozda    6 年前

    你可以使用:

    DELETE FROM Image
    WHERE id IN (SELECT sub.id
                 FROM (SELECT im.id,
                        ROW_NUMBER() OVER(PARTITION BY i.id ORDER BY im.id) AS rn
                       FROM Item i
                       JOIN Image im
                         ON i.id = im.item_id) sub
                 WHERE sub.rn > 4);
    

    在你跑步之前 DELETE 检查子查询是否返回所需的ID。

        2
  •  1
  •   Gordon Linoff    6 年前

    我会这样做:

    delete from image
    where id < (select i2.id
                from image i2
                where i2.item_id = i.item_id
                order by id desc
                limit 1 offset 3
               );
    

    这将删除任何 id 比第四大还小 身份证件 对于给定的 item_id .