У меня есть 2 объекта и изображения.У предмета может быть несколько изображений.
Если у предмета более 4 изображений, я хочу удалить те, что указаны выше, упорядоченные по id
Структура:
Item id | name 1 a 2 b 3 c Image id | item_id 1 1 2 1 3 2
Я бы сделал:
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.
id
item_id
Вы можете использовать:
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 проверьте, возвращает ли подзапрос требуемые идентификаторы.
DELETE