【问题标题】:Delete All Rows After a certain number删除某个数字后的所有行
【发布时间】:2014-02-21 20:25:59
【问题描述】:

我有 5000 行数据。我想删除 1000 之后的所有行我该怎么做?

Delete from table
where *
limit 1000

这对吗?

【问题讨论】:

  • 哪个数据库?甲骨文?数据库服务器? mysql?其他?
  • 您是否关心删除了哪些行,或者只要删除 4,000 行,它们就可以是任意随机行?
  • 前 1000 行之后的任何内容
  • 什么定义了“第一”——标准是什么?

标签: sql sql-server


【解决方案1】:

SQL 服务器

WITH cte
     AS (SELECT *,
                row_number() OVER (ORDER BY some_column) AS rn
         FROM   TABLE)
DELETE FROM cte
WHERE  rn > 1000 

【讨论】:

    【解决方案2】:
    DELETE FROM TABLE
    WHERE ID NOT IN
    (
       SELECT ID FROM TABLE LIMIT 1000
    )
    

    这个查询将:

    1 - 从您的数据库中选择前 1000 条记录

    2 - 删除所有不在前 100 条记录列表中的记录

    【讨论】:

    • SKIP 由 firebird DBMS 支持,这是我的错。改用 OFFSET 并告诉我
    【解决方案3】:

    SQL Fiddle

    Oracle 11g R2 架构设置

    CREATE TABLE test ( A ) AS
    SELECT LEVEL
    FROM   DUAL
    CONNECT BY LEVEL <= 5000;
    

    查询 1

    SELECT COUNT(*) FROM test
    

    Results

    | COUNT(*) |
    |----------|
    |     5000 |
    

    查询 2

    DELETE FROM test
    WHERE A IN ( SELECT A FROM (SELECT A, ROWNUM rn FROM test ) WHERE rn > 1000 )
    

    Results

    查询 3

    SELECT COUNT(*) FROM test
    

    Results

    | COUNT(*) |
    |----------|
    |     1000 |
    

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 2018-04-03
      • 1970-01-01
      • 2020-07-19
      • 2014-04-28
      • 2015-10-23
      相关资源
      最近更新 更多