(SQL) 删除除最新行以外的所有行
(SQL) Delete all rows except the newest one
我有一个问题,即我要从 table 中删除除最新行之外的所有行。我不太了解如何构造合适的查询。
table结构的外观:
| 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 |
如果要删除所有行,SQL 是:
Delete from theTable;
如果你想排除最新的,希望你有一个id,你这样写:
Delete from theTable where id <> (Select max (id) from theTable)
你将有两种不同的解决方案,如果你想删除除最后一行以外的所有行,那么首先找到该 table 中的总行数,然后删除除最大值以外的所有行第一个解决方案你应该使用这个
DELETE FROM tablename WHERE column1 NOT IN (SELECT MAX(column1) column1 FROM tablename)
其次,如果您有任何特定的唯一值,则 select 针对该唯一值的所有行然后删除,然后您需要在 SELECT 语句中定义它
DELETE FROM tablename WHERE column2='anyvalue' AND column1 NOT IN (SELECT MAX(column1) column1 FROM tablename)
考虑到上述答案(正确),您还可以对内部 select 设置限制,并按您要使用的唯一字段排序。为了保留你想保留的行并删除所有其他行。
DELETE FROM tablename WHERE column1 NOT IN (SELECT column1 FROM tablename order by column1 desc LIMIT 1 OFFSET 0)
我有一个问题,即我要从 table 中删除除最新行之外的所有行。我不太了解如何构造合适的查询。
table结构的外观:
| 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 |
如果要删除所有行,SQL 是:
Delete from theTable;
如果你想排除最新的,希望你有一个id,你这样写:
Delete from theTable where id <> (Select max (id) from theTable)
你将有两种不同的解决方案,如果你想删除除最后一行以外的所有行,那么首先找到该 table 中的总行数,然后删除除最大值以外的所有行第一个解决方案你应该使用这个
DELETE FROM tablename WHERE column1 NOT IN (SELECT MAX(column1) column1 FROM tablename)
其次,如果您有任何特定的唯一值,则 select 针对该唯一值的所有行然后删除,然后您需要在 SELECT 语句中定义它
DELETE FROM tablename WHERE column2='anyvalue' AND column1 NOT IN (SELECT MAX(column1) column1 FROM tablename)
考虑到上述答案(正确),您还可以对内部 select 设置限制,并按您要使用的唯一字段排序。为了保留你想保留的行并删除所有其他行。
DELETE FROM tablename WHERE column1 NOT IN (SELECT column1 FROM tablename order by column1 desc LIMIT 1 OFFSET 0)