2017-06-18 100 views
0

我有一個問題,即我刪除表中的所有行,除了最新的一個。我不知道如何構建適當的查詢。(SQL)刪除除最新的一行外的所有行

表結構的外觀:

| 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  | 
+0

您是否在所有行或不同值中具有相同的值? – Rtra

+0

@Rtra不,價值不一樣。 – Trawlr

+0

你可以找到我的答案和解釋,以便詳細瞭解 – Rtra

回答

2

如果要刪除所有行的SQL是:

Delete from theTable; 

如果你要排除的最新的,希望你有你寫一個這樣的ID:

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

非常感謝!我不得不修改查詢一下,但它的工作原理應該再次感謝您的幫助。 – Trawlr

1

您將有兩種不同的解決方案,對於這一點,如果你想刪除除最後所有的行,然後先找到該錶行的總數,然後刪除所有行除最高值這個第一個解決方案你應該使用這個

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) 
0

考慮到將其定義上面的答案(這是正確的),你可以另外設置一個限制你的內部選擇和一個命令由你想要使用的唯一字段。以便保留要保留的行並刪除所有其他行。

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