【问题标题】:(SQL) Delete all rows except the newest one(SQL) 删除除最新行之外的所有行
【发布时间】:2017-06-18 22:04:12
【问题描述】:

我有一个问题,即我要从表中删除所有行,除了最新的行。我不太了解如何构造适当的查询。

表结构外观:

| column1 | column2 | column3 | column4 |
| --------|---------|---------|---------|
| aaa     | aaa     | aaa     | aaa     | 
| bbb     | bbb     | bbb     | bbb     |
| ccc     | ccc     | ccc     | ccc     |

假设最后添加了第 3 行,这是最新的。查询后:

| column1 | column2 | column3 | column4 |
| --------|---------|---------|---------|
| ccc     | ccc     | ccc     | ccc     |

【问题讨论】:

  • 所有行的值相同还是不同?
  • @Rtra 不,不一样的值。
  • 你可以找到我的答案有解释所以详细了解

标签: mysql sql sql-delete


【解决方案1】:

如果要删除所有行,SQL 是:

Delete  from theTable;

如果你想排除最新的,希望你有一个你这样写的id:

Delete  from theTable where id <> (Select max (id) from theTable)

【讨论】:

  • 非常感谢!我不得不稍微修改一下查询,但它可以正常工作,再次感谢您的帮助。
【解决方案2】:

您将有两种不同的解决方案,如果您想删除除最后一行之外的所有行,则首先找到该表中的总行数,然后删除除最高值之外的所有行,这是您应该使用的第一个解决方案

DELETE FROM tablename WHERE column1 NOT IN (SELECT MAX(column1) column1 FROM tablename)

其次,如果您有任何特定的唯一值,则根据唯一值选择所有行,然后删除,然后您需要在 SELECT 语句中定义它

DELETE FROM tablename WHERE column2='anyvalue' AND column1 NOT IN (SELECT MAX(column1) column1 FROM tablename)

【讨论】:

    【解决方案3】:

    考虑到上述答案(这些答案是正确的),您还可以对您的内部选择设置一个限制,并按您要使用的唯一字段设置一个顺序。为了保留您要保留的行并删除所有其他行。

    DELETE FROM tablename WHERE column1 NOT IN (SELECT column1 FROM tablename order by column1 desc LIMIT 1 OFFSET 0)
    

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      相关资源
      最近更新 更多