【问题标题】:SQL Delete Records within a specific Range [duplicate]SQL删除特定范围内的记录[重复]
【发布时间】:2012-01-03 17:34:51
【问题描述】:

对于有经验的人来说,这可能是一个非常简单的问题,但我只是想知道删除 SQL 表中位于特定范围之间的几百条记录的最安全方法。

例如,我需要删除 ID 介于 79 和 296 之间的行:

我担心的是,如果我说删除 ID 为 (>79 AND

【问题讨论】:

  • 这是你应该能够自己测试的东西。如果您没有可以尝试 SQL,尤其是 DML 的游戏笔,那么您应该得到一个。您还应该了解如何从语句中恢复。例如,更改您的环境,使其不会自动提交。这样,如果语句删除的记录多于您的预期,您就可以回滚。
  • 你能不能先用 select 语句测试一下?
  • @YvetteColomb 你链接的答案肯定是重复的,这个问题是在近两年前提出的?
  • D.Mac,Q 可能是新问题的骗子(请参阅 Meta),如果我们使用投票和意见作为代理,Q 具有更好的 SEO。 ...不过,@YvetteColomb,我觉得关闭另一个 Q 作为这个 Q 的欺骗更合适。

标签: sql sql-delete records


【解决方案1】:

如果你使用 Sql Server

delete from Table where id between 79 and 296

注意:between 语句包含在内,因此行 79296 也将被删除

您的编辑之后:您现在澄清了您想要的:

ID (>79 AND < 296)

所以用这个:

delete from Table where id > 79 and id < 296

【讨论】:

  • 或者实际上大多数 SQL 数据库
  • 谢谢你们,我以前没有遇到过!还是有点新手...感谢您的解决方案,您为我节省了大约 4 个小时的手动删除记录:)
  • 有问题的条件是ID (>79 AND < 296) 这将删除ID (>= 79 AND <= 296),当然它可能不是精确的问题:-)。
  • 仅供参考:between 语句包含在内,因此第 79 行和第 296 行也将被删除
  • @Amon 完成.......
【解决方案2】:

您提供了一个条件 ID(>79 和

delete from tab
where id > 79 and id < 296

这与:

delete from tab
where id between 80 and 295

如果id 是一个整数。

全部回答:

delete from tab
where id between 79 and 296

这与:

delete from tab
where id => 79 and id <= 296

注意区别。

【讨论】:

  • 是的,谢谢你……这就是我想做的事情。我担心它会首先删除大于 79 的所有内容,然后删除小于 296 的所有内容!可能是我太担心了:)
  • 哈哈!那将是delete from tab where id =&gt; 79 OR id &lt;= 296 - 请注意OR 而不是AND,这将使它等于单独运行两个查询。如果 id 是不可为空的整数,那确实会删除所有内容。如果 ID 可以是 NULL,则保留这些行。
【解决方案3】:
DELETE FROM table_name 
WHERE id BETWEEN 79 AND 296;

【讨论】:

    【解决方案4】:

    您也可以将删除更改为选择 *

    并测试您的选择

    选择的记录将与删除的记录相同

    如果您不确定,您也可以将您的语句包装在开始/回滚中 - 测试该语句,然后如果一切正常,请删除回滚

    例如

    SELECT * FROM 表 id 在 79 和 296 之间

    将显示与 where 匹配的所有记录 如果它们是您“真正”想要删除的内容,请使用

    从表中删除 id 在 79 和 296 之间

    您还可以创建一个触发器 / 来捕获删除并将它们放入历史表中

    所以如果你误删了某些东西,你总是可以找回来

    (保持您的历史记录表记录不超过 6 个月或任何业务规则规定)

    【讨论】:

      【解决方案5】:

      如果您在 SQL Server 中将其编写如下,则不会有擦除数据库表的危险,除非该表中的所有值都恰好在这些值之间:

      DELETE FROM [dbo].[TableName] WHERE [TableName].[IdField] BETWEEN 79 AND 296 
      

      【讨论】:

        【解决方案6】:

        我担心的是如果我说删除带有 ID (>79 AND

        这不会发生,因为您将有一个 where 子句。发生的情况是,如果您有类似 delete * from Table1 where id between 70 and 1296 的语句,sql 查询处理器首先会扫描表并查找该范围内的那些记录,然后应用删除。

        【讨论】:

          【解决方案7】:

          您可以使用这种方式,因为 id 不能在所有情况下都是连续的。

          SELECT * 
          FROM  `ht_news` 
          LIMIT 0 , 30
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-12-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-07
            • 2010-10-24
            • 2017-05-26
            相关资源
            最近更新 更多