2014-01-22 116 views
0

我有以下SELECT聲明,從SQLite的刪除使用Select語句

SELECT * From MyTable as t 
WHERE 
t.Key1 = 
(SELECT Max(r.Key1) From MyTable as r 
WHERE (Key2 = t.Key2 AND Key3 = t.Key3 AND Key4 = t.Key4)) 
AND 
(Key2 = t.Key2 AND Key3 = t.Key3 AND Key4 = t.Key4) 

將選擇所有我想從MyTable刪除的記錄。但是,當我嘗試刪除記錄時,即通過將SELECT *更改爲DELETE,我收到一條錯誤消息,我認爲這是因爲您無法使用DELETE語句的別名。

那麼我怎麼會從MyTable刪除這些選定的記錄呢?

回答

1

確實無法在DELETE語句中爲表名使用別名。

但是,該表仍然有一個名稱。 只要這個表的所有其他實例有一個別名,你可以明確地指任何人:

DELETE From MyTable 
WHERE 
MyTable.Key1 = 
(SELECT Max(r.Key1) From MyTable as r 
WHERE (Key2 = MyTable.Key2 AND Key3 = MyTable.Key3 AND Key4 = MyTable.Key4)) 
AND 
(Key2 = MyTable.Key2 AND Key3 = MyTable.Key3 AND Key4 = MyTable.Key4) 

(此查詢的最後一行是沒有意義的,因爲它不是子查詢的一部分Key2MyTable.Key2參照同一張表。)

+0

謝謝,有道理 – rwolst