Удалить только 500 строк из таблицы - PullRequest
4 голосов
/ 03 мая 2009

Может кто-нибудь, пожалуйста, помогите мне с запросом удалить только 500 строк из таблицы, которая имеет 20000 строк. Также должно быть старше определенной даты.

Спасибо за вашу помощь,

Soofy

Ответы [ 6 ]

9 голосов
/ 03 мая 2009

Вы можете использовать ключевое слово Top, как при выборе

.
Delete Top (500) 
From myTable
Where Date < '01/01/2009'
6 голосов
/ 03 мая 2009

Если вы используете SQL Server 2005, вы можете сделать это:

DELETE TOP (500) FROM your_table
WHERE date_field < @my_particular_date

или вы можете сделать это:

SET ROWCOUNT 500

DELETE your_table
WHERE date_field < @my_particular_date

в SQL Server 2000 вы можете сделать это:

DELETE your_table
WHERE pk_field IN (
  SELECT TOP (500) * FROM your_table
  WHERE date_field < @my_particular_date
)
3 голосов
/ 03 мая 2009
DELETE FROM Table_Name WHERE Primary_Key_Column IN (
    SELECT TOP 500 Primary_Key_Column FROM Table_Name WHERE [Date] < '01/01/2009'  ORDER BY Primary_Key_Column ASC
)
1 голос
/ 03 мая 2009

Top работает только в Transact Sql, каждый sql имеет свою версию

Для mySql и posGres

Delete 
From myTable
Where Date < '01/01/2009'
LIMIT 10;

Для оракула:

SELECT 
FROM myTable 
WHERE Date < '01/01/2009'
and ROWNUM <= 10
1 голос
/ 03 мая 2009

SET ROWCOUNT 500

УДАЛИТЬ ИЗ TableName, ГДЕ TheDate <@ YourDate </p>

0 голосов
/ 03 мая 2009

Единственное, что я добавлю, это то, что вы, вероятно, захотите использовать «ORDER BY [DATE] DESC» в конце большинства этих запросов. И если у вас есть несколько совпадающих дат, вы захотите добавить дополнительный порядок столбцов, чтобы удалить правильные значения.

Это, конечно, предполагает, что у вас действительно есть "созданная дата" или "измененная дата", которую вы можете использовать для сортировки. Вы не указали, был ли он самым старым созданным или самым старым немодифицированным. (т. е. если ID = 1 самый старый, но я вчера его изменил, если он все еще будет удален?), с которым вам следует быть осторожным, если вы сортируете по первичному ключу - при условии, что вы используете инкрементный первичный ключ, а не GUID или что-то ...

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