Я хотел бы удалить свой выбор MySQL.
Вот мой запрос на выбор MySQL:
SELECT *
FROM Items
WHERE id_user=1
ORDER
BY id_user
LIMIT 2,1
С помощью этого рабочего запроса я выбираю третий элемент на моем столе, который имеет значение id_user: 1.
Теперь я хотел бы удалить элемент, который был выбран по моему запросу.
Я ищу такой же смысловой запрос, который будет выглядеть так:
DELETE FROM Items (
SELECT * FROM Items WHERE id_user=1 ORDER BY id_user LIMIT 2,1
)






Вы не предоставили определение своей таблицы. Я предполагаю, что у него есть столбец первичного ключа под названием id.
В этом случае вы можете использовать это
CREATE TEMPORARY TABLE doomed_ids
SELECT id FROM Items WHERE id_user = 1 ORDER BY id_user LIMIT 2,1;
DELETE FROM Items
WHERE id IN ( SELECT id FROM doomed_ids);
DROP TABLE doomed_ids;
Это головная боль, но она работает в обход ограничений MySQL и MariaDB, запрещающих LIMITs в ... IN (SELECT ...) предложениях.
Вы можете использовать запрос на выборку, чтобы создать производную таблицу и соединить ее с основной таблицей, чтобы определить, какие записи нужно удалить. Производные таблицы могут использовать предложение limit.
Если предположить, что ПК называется id, запрос будет выглядеть следующим образом:
delete i from items i
inner join (SELECT id FROM Items
WHERE id_user=1
ORDER BY id_user LIMIT 2,1) i2 on i.id=i2.id
Вам нужно подставить свой PK вместо id. Если у вас есть ПК с несколькими столбцами, вам нужно выбрать все поля ПК в производной таблице и присоединиться ко всем из них.
(Компенсационная оговорка)
Первое, что нужно отметить, это то, что с вашим запросом возникла проблема. Вы фильтрация по уникальному значению id_user и сортировка по тому же столбцу. Поскольку все записи в наборе результатов будут иметь одинаковые id_user, фактический порядок набора результатов не определен, и мы не можем достоверно сказать, какая запись идет третьей.
Предполагая, что у вас есть еще один столбец для устранения неоднозначности набора результатов (т. е. какое-то значение, уникальное среди каждой группы записей, имеющих одно и то же id_user), скажем, id, вот решение вашего вопроса, в котором используется самообъединение с ROW_NUMBER() для поиска третья запись в каждой группе.
DELETE i
FROM items i
INNER JOIN (
SELECT
id,
id_user,
ROW_NUMBER() OVER(PARTITION BY id_user ORDER BY id) rn
FROM items
) c ON c.id = i.id AND c.id_user = i.id_user AND c.rn = 3
WHERE i.id_user=1 ;
(Ограничение - это смещение)