在sql中刪除表中的所有行但保留n行的最佳方式是什麼?從SQL中的數據庫表中刪除除top n之外的所有內容
67
A
回答
61
DELETE FROM Table WHERE ID NOT IN (SELECT TOP 10 ID FROM Table)
編輯:
克里斯帶來了良好的業績創下自TOP 10的查詢將針對每行運行。如果這是一次性事情,那麼它可能不是什麼大不了的事情,但如果這是一件普通的事情,那麼我就仔細觀察它。
2
我不知道其他的味道,但MySQL的DELETE允許極限。
如果你可以訂購的東西,讓你想保持n行是在底部,那麼你可以做一個DELETE FROM表限制TableCount的-N。
編輯
嗚。我認爲我更喜歡Cory Foy's答案,假設它適用於你的情況。相比之下,我的方式感覺有點笨拙。
0
我會解決它使用下面的技術。該示例預計在每行上有條款表,其中id。
Delete article where id not in (select top 1000 id from article)
編輯:太慢了,回答我的問題...
29
我會選擇ID列(S)的一組要保持到一個臨時表或表變量行。然後刪除臨時表中不存在的所有行。其他用戶提到的語法:
DELETE FROM Table WHERE ID NOT IN (SELECT TOP 10 ID FROM Table)
存在潛在的問題。 「SELECT TOP 10」查詢將針對表中的每一行執行,這可能會造成巨大的性能下降。你想避免一遍又一遍地做同樣的查詢。
這句法應該工作,根據你你原來的SQL語句中列出:
create table #nuke(NukeID int)
insert into #nuke(Nuke) select top 1000 id from article
delete article where not exists (select 1 from nuke where Nukeid = id)
drop table #nuke
0
重構?
Delete a From Table a Inner Join (
Select Top (Select Count(tableID) From Table) - 10)
From Table Order By tableID Desc
) b On b.tableID = A.tableID
編輯:嘗試他們無論是在查詢分析器,目前的答案是禁食(由...該死的順序)
0
更好的方式是插入你想進入另一個表中的行,刪除原始表格,然後重命名新表格,使其與舊錶格名稱相同
6
未使用MS SQL的用戶的未來參考。
在PostgreSQL中使用ORDER BY
和LIMIT
而不是TOP
。
DELETE FROM table
WHERE id NOT IN (SELECT id FROM table ORDER BY id LIMIT n);
MySQL - well ...
錯誤 - 該版本的MySQL還不支持 'LIMIT & IN/ALL/ANY/SOME子查詢'
尚未我猜。
1
這真的是語言特定的,但我可能會使用類似下面的SQL服務器。
declare @n int
SET @n = SELECT Count(*) FROM dTABLE;
DELETE TOP (@n - 10) FROM dTable
,如果你不關心行的確切數目,總有
DELETE TOP 90 PERCENT FROM dTABLE;
2
我想用一個虛擬表會比一個IN子句或臨時表好得多。
DELETE
Product
FROM
Product
LEFT OUTER JOIN
(
SELECT TOP 10
Product.id
FROM
Product
) TopProducts ON Product.id = TopProducts.id
WHERE
TopProducts.id IS NULL
相關問題
- 1. 刪除字符串中除數字之外的所有內容
- 2. 從SQL Server數據庫中的所有表數據刪除,除了一些表
- 3. 從列表中刪除所有內容
- 4. 如何從sql server 2005中的數據庫中刪除所有表,除了一個表之外
- 5. PHP從陣列中刪除除x以外的所有內容
- 6. 刪除除指定範圍之外的電子表格中的所有內容?
- 7. 從SQLite數據庫中刪除內容
- 8. 刪除數據庫中的所有內容少於數字
- 9. 如何從表中刪除所有內容,除了MySQL中的1項外?
- 10. 如何從外部數據庫中刪除整列的內容?
- 11. 從包含表的所有數據庫中的表中刪除
- 12. Nutch + Solr; SolrDeleteDuplicates刪除除索引之外的所有內容
- 13. 記事本++:如何刪除除url之外的所有內容?
- 14. 從數據庫的所有表中刪除所有記錄
- 15. 從數據庫的所有表中刪除所有行
- 16. 從sqlite數據庫中刪除除最新500行以外的所有數據
- 17. 如何從數據庫中刪除除少數表以外的所有表中的數據
- 18. MySQL刪除之前的所有內容/
- 19. 刪除除VIM中第一列以外的所有內容
- 20. 刪除除了某個標記及其內容之外的所有內容Python
- 21. 刪除除括號之外的字符串中的所有內容
- 22. JS:刪除第n個元素之間的所有內容
- 23. 從sqlite數據庫中的表中刪除所有記錄
- 24. 如何從PDF中刪除位圖以外的所有內容?
- 25. 如何刪除SQL Server數據庫中的所有表?
- 26. 如何刪除除SQL中的所有行外的所有行
- 27. 刪除庫中的所有數據集
- 28. 正則表達式刪除除了單詞之外的所有內容。 java
- 29. 從字符串中刪除除尾0之外的所有0
- 30. 如何刪除表中的所有內容sql
如果有人通常需要刪除除前n行之外的所有行,我認爲他們有更大的問題需要擔心。 – 2009-02-03 22:17:53
只需要注意,您可以通過手動創建臨時表來解決子查詢性能問題(假設這是一個不頻繁的操作),或者將查詢寫爲`DELETE FROM TABLE WHERE ID NOT IN(SELECT id FROM(SELECT TOP 10 ID FROM表)AS x)`強制MySQL創建一個臨時表。 – 2011-07-19 16:46:39
謝謝。這是一個生活救星:) – Si8 2014-04-21 14:44:54