(SQL)删除除最新行之外的所有行

时间:2017-06-18 22:04:13

标签: mysql sql

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

表结构的外观:

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

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

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

3 个答案:

答案 0 :(得分:2)

如果要删除SQL的所有行:

Delete  from theTable;

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

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

答案 1 :(得分:1)

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

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)

答案 2 :(得分:0)

考虑到上述答案(正确),您还可以根据要使用的唯一字段设置内部选择和订单的限制。为了保留你想要保留的行并删除所有其他行。

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