MySQL, удалить все записи, кроме последних 10ти

Компьютеры программирование MySQL базы данных

Таблица с Primary-ключом по двум полям: id и year. В ней находятся записи о документах, которые нумеруются id/год (id каждый год сбрасывается в единицу, вы встречали такое, я уверен). Запрос на выборку остающихся записей такой: select * from this_table where 1 order by year asc, id asc limit 0,10
Остальные записи необходимо delete. Как?
Знаю про структуру "not in", но:
- не уверен, как правильно составить с ним запрос
- говорят, что ета штука очень медленная. Есть ли альтернативы?

Примечание:
NetRain (Alexander Borovikov)
мне тут на соседнем форуме подсказали почти аналогичный запрос: DELETE a
FROM this_table a
LEFT JOIN (SELECT * FROM this_table ORDER BY year, id LIMIT 10) b ON a.year = b.year AND a.id = b.id
WHERE b.id IS NULL

Хотя, я пока ждал, решил сделать двумя запросами в самом PHP (так как в нём пишу). Но лучше воспользуюсь твоим вариантом или тем вариантом с форума. А создавать временную таблицу тоже ИМХО не труЪ
Ответы:
DELETE `tbl1`.* FROM `tbl1` LEFT JOIN (SELECT `id`, 1 AS `delete` FROM `tbl1` AS `tbl11` ORDER BY `year` ASC, `id` ASC LIMIT 0, 10) AS `tmp_tbl` ON tbl1.id = tbl11.id WHERE tbl11.delete <> 1
И еще варант:
Создайте еще одну таблицу с точно такой же структурой. Назовем ее tbl_new
Дальше:
INSERT INTO `tbl_new` SELECT * FROM `tbl` ORDER BY `year` ASC, `id` ASC LIMIT 10;
RENAME TABLE `tbl` TO `tbl_old`, `tbl_new` TO `tbl`;
TRUNCATE `tbl_old`; RENAME TABLE `tbl_old` TO `tbl_new`;


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.