SQL удаляет все строки, кроме некоторых - PullRequest
12 голосов
/ 09 августа 2011

У меня есть таблица со следующими столбцами (из URL):

 [id,url,visited,timestamp]
 Types:[int,string,int,long]

Я хочу:

Удалить все URL-адреса, кроме 10 не посещенных, с приоритетом более высокой отметки времени (или удалить все, если все посещены, например)

Это возможно сделать в одном запросе? В любом случае, каков наилучший запрос (запросы) для этого?

Заранее спасибо

Ответы [ 2 ]

21 голосов
/ 09 августа 2011

Я не думаю, что TOP работает в sqlite - нужно использовать LIMIT

DELETE FROM mytable WHERE id NOT IN ( 
   SELECT id FROM mytable  
   WHERE visited = false 
   ORDER BY timestamp DESC
   LIMIT 10  
   )  
5 голосов
/ 09 августа 2011
DELETE FROM tableofDeletion
WHERE
  -- Delete all items not in the following select
  -- ordered by the timestamp so we can get the top 10 
  id NOT IN (SELECT id 
             FROM tableofDeletion
             WHERE 
                 visited = 0 -- false
             ORDER BY timestamp DESC
             LIMIT 10)

Я думаю, что это обеспечивает то, что вы ищете.

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