在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. 从SQL Server数据库中的所有表数据删除,除了一些表
- 2. 如何从sql server 2005中的数据库中删除所有表,除了一个表之外
- 3. 如何从表中删除所有内容,除了MySQL中的1项外?
- 4. 如何从外部数据库中删除整列的内容?
- 5. 记事本++:如何删除除url之外的所有内容?
- 6. 从数据库的所有表中删除所有记录
- 7. 从数据库的所有表中删除所有行
- 8. 从sqlite数据库中删除除最新500行以外的所有数据
- 9. 如何从数据库中删除除少数表以外的所有表中的数据
- 10. MySQL删除之前的所有内容/
- 11. 删除除了某个标记及其内容之外的所有内容Python
- 12. JS:删除第n个元素之间的所有内容
- 13. 在MySql中删除除了一个之外的所有表格
- 14. 如何删除表中的所有内容sql
- 15. 删除SQL Server数据库中的所有数据
- 16. 删除SQL Server数据库中的所有表格,除了少数
- 17. 从Sugar ORM中删除所有表中的所有数据
- 18. SQL为每个唯一值删除除最后N行之外的所有行
- 19. 删除文件中的所有内容
- 20. 从批处理文件中删除SQL Server数据库中的所有表?
- 21. 如何使用MongoAlchemy删除数据库的所有内容
- 22. 从SQL表中删除数据
- 23. 删除CockroachDB中的数据库中的所有表
- 24. 如何去除变量中除数字之外的所有内容?
- 25. 删除PHP中的圆括号之间的所有内容?
- 26. 从sql 2005数据库中删除所有表的最佳方法
- 27. 从数据库中删除
- 28. PHP删除除字符串以外的所有内容
- 29. VI删除除模式以外的所有内容
- 30. 如何删除SQL CE中表中的所有数据?
如果有人通常需要删除除前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