SQl Удалить топ 100 из таблицы - PullRequest
8 голосов
/ 01 мая 2009

Я пытаюсь удалить все, кроме самых последних 3000 элементов в таблице. В таблице 105 000 записей.

Я пытаюсь это сделать, но сгенерирован неправильный синтаксис.

delete tRealtyTrac where creation in( select top 103000 from tRealtyTrac order by creation)

Ответы [ 5 ]

19 голосов
/ 01 мая 2009

Синтаксис удаления будет немного отличаться от того, что у вас есть. Примером может быть:

DELETE FROM tRealtyTrac
WHERE creation in( select top 103000 creation from tRealtyTrac order by creation)

Обратите внимание, что есть ключевое слово "from". Это говорит о том, что мы хотим удалить из таблицы tRealtyTrac

Единственная проблема, с которой я столкнулся, это то, что вы, вероятно, захотите не использовать творение ...

Вместо того, чтобы:

DELETE FROM tRealtyTrac
WHERE someuniqueidcolumnlikeakeyofsomesort in( select top 103000 someuniqueidcolumnlikeakeyofsomesort from tRealtyTrac order by creation)

В противном случае вы можете удалить больше, чем планировали.

4 голосов
/ 01 мая 2009

Внутренний запрос должен быть:

выберите топ 103000 создание из ...

3 голосов
/ 24 сентября 2013

Что касается меня, CTE - лучшее решение для упорядоченного удаления

;WITH records_delete AS (
    select top 103000 creation 
    from tRealtyTrac 
    order by creation)
DELETE records_delete 
2 голосов
/ 01 мая 2009

Супер простой способ сделать это:

  1. выберите топ 3001 из заказа tRealtyTrac путем создания desc

  2. взять дату последнего, затем удалить tRealtyTrac, где создание <'thedateyoufound' </p>

Но у Энди тоже есть хорошая идея. ;)

1 голос
/ 01 мая 2009

Попробуйте это:

DELETE FROM tRealtyTrac WHERE creation IN (SELECT top 103000  * FROM tRealtyTrac ORDER by creation)

Вы забыли поля в tRealtyTrac (я использовал звездочку, чтобы выбрать все, но вы можете составить список из них или только один). Вы также забыли предложение FROM.

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