Удалите Связи, если на объект / предмет больше, чем число (4) - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть 2 объекта и изображения.У предмета может быть несколько изображений.

Если у предмета более 4 изображений, я хочу удалить те, что указаны выше, упорядоченные по id

Структура:

Item

id | name
1    a
2    b
3    c

Image

id | item_id
1    1
2    1 
3    2

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Я бы сделал:

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, которые меньше четвертого по величине id для данного item_id.

0 голосов
/ 16 декабря 2018

Вы можете использовать:

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 проверьте, возвращает ли подзапрос требуемые идентификаторы.

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