代码之家  ›  专栏  ›  技术社区  ›  Bryan

SQL从表中删除前100个

sql
  •  8
  • Bryan  · 技术社区  · 16 年前

    我试图删除表中除最近3000项以外的所有项。这张表有105000条记录。

    我正在尝试此操作,但生成的错误语法不正确。

    delete tRealtyTrac where creation in( select top 103000 from tRealtyTrac order by creation)
    
    5 回复  |  直到 16 年前
        1
  •  19
  •   Brian    16 年前

    删除语法将与您的略有不同。例如:

    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)
    

    否则,删除的内容可能会超出您的预期。

        2
  •  4
  •   Andy White    16 年前

    内部查询必须是:

    选择前103000 创造 从…

        3
  •  3
  •   AdvanTiSS    11 年前

    对于我来说,CTE是更好的顺序删除解决方案

    ;WITH records_delete AS (
        select top 103000 creation 
        from tRealtyTrac 
        order by creation)
    DELETE records_delete 
    
        4
  •  2
  •   ChrisLively    16 年前

    一种非常简单的方法:

    1. 按创建说明从Trealytrac订单中选择前3001

    2. 取最后一个日期,然后删除创建<'您找到的日期'

    但安迪也有个好主意。 ;)

        5
  •  1
  •   backslash17    16 年前

    试试这个:

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

    您忘记了trealtytrac中的字段(我用星号选择了所有字段,但您可以列出它们或只列出一个)。您还忘记了FROM子句。