Какой эффективный способ удалить самую последнюю X-запись из SQL? - PullRequest
1 голос
/ 05 октября 2009

У меня есть простая таблица, в которой одно из полей является столбцом даты. Я могу выбрать самые последние X записей, выполнив

Select * from MyTable order by last_update desc limit X

Но как мне эффективно удалить эти столбцы? Является ли отбор самым быстрым?

Ответы [ 4 ]

2 голосов
/ 05 октября 2009

Если я правильно помню, предложение IN принимает дополнительный выбор. Может быть не так.

DELETE FROM Person 
WHERE 
  Person.ID IN ( 
     SELECT t.ID 
     FROM 
        Person t 
     ORDER BY 
        t.joinTime DESC
     LIMIT X
   )
2 голосов
/ 05 октября 2009

Вы можете сделать «удалить откуда» точно таким же образом, с теми же условиями, что и исходный запрос. например:

DELETE FROM Person WHERE Person.name = "jeff"

или

DELETE FROM Person WHERE Person.joinTime > 12001234567 LIMIT 100

Если вы хотите удалить диапазон (например, последние 10), вы можете попробовать:

DELETE * FROM Person WHERE id >= ( LAST_INSERT_ID() - 10 ); 
1 голос
/ 08 октября 2009
DELETE  d.*
FROM    mytable d
LEFT JOIN
        (
        SELECT  id
        FROM    mytable
        ORDER BY
                last_update DESC
        LIMIT   10
        ) q
ON      d.id = q.id
WHERE   q.id IS NULL

Если вы используете MySQL, это предпочтительное решение, поскольку IN (SELECT ... LIMIT) не работает в MySQL.

См. Эту запись в моем блоге для более подробной информации:

1 голос
/ 05 октября 2009

Возможно что-то вроде:

DELETE FROM MyTable WHERE rowid IN
(SELECT rowid FROM MyTable ORDER BY last_update DESC LIMIT X);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...