2014-01-22 83 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