我有以下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
删除这些选定的记录?
答案 0 :(得分: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)
(此查询的最后一行没有意义,因为它不是子查询的一部分,Key2
和MyTable.Key2
引用同一个表。)