首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从SQL中的数据库表中删除除top n之外的所有内容

从SQL中的数据库表中删除除top n之外的所有内容
EN

Stack Overflow用户
提问于 2008-09-05 17:46:34
回答 5查看 95K关注 0票数 92

在sql中删除表中所有行的最好方法是什么,但将n行保留在顶部?

EN

回答 5

Stack Overflow用户

发布于 2008-09-05 17:52:24

我会选择ID列要保存到临时表或表变量中的行集。然后删除临时表中不存在的所有行。另一个用户提到的语法:

代码语言:javascript
复制
DELETE FROM Table WHERE ID NOT IN (SELECT TOP 10 ID FROM Table)

有一个潜在的问题。"SELECT TOP 10“查询将针对表中的每一行执行,这可能会对性能造成巨大的影响。您希望避免一遍又一遍地进行同一查询。

基于您所列出的原始SQL语句,此语法应该有效:

代码语言:javascript
复制
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
票数 33
EN

Stack Overflow用户

发布于 2012-11-05 13:18:43

我认为使用虚拟表比使用IN子句或临时表要好得多。

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2009-02-03 22:15:44

这实际上是特定于语言的,但我可能会对SQL server使用类似以下内容的内容。

代码语言:javascript
复制
declare @n int
SET @n = SELECT Count(*) FROM dTABLE;
DELETE TOP (@n - 10 ) FROM dTable

如果您不关心确切的行数,总会有

代码语言:javascript
复制
DELETE TOP 90 PERCENT FROM dTABLE;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档