首页 > 解决方案 > 在同一个查询的两个表上使用别名删除[Postgres 9.5]

问题描述

我不确定这里有什么问题:

DELETE t1 FROM modified_client_config AS t1, modified_client_config AS t2
WHERE t1.Date < t2.Date AND t1.Client = t2.Client AND t1.Server = t2.Server;

我在问问题之前进行了搜索,发现使用别名删除时有一个规则:

DELETE f FROM dbo.foods AS f WHERE f.name IN (...)

那么,是否可以将此语法与别名一起使用?

我知道它与两个别名是同一张表,但我想我的同事写这个是为了仅在 date1 < date2 时删除。

标签: sqlpostgresqlsql-delete

解决方案


似乎您只想为client和的每个组合保留最新行server

您可以使用共同相关的子选择来做到这一点:

delete from modified_client_config as t1
where exists (select * 
              from modified_client_config as t2
              where t2.date > t1.date
                and t2.client = t1.client 
                and t2.server = t1.server);

在线示例:http ://rextester.com/LOAN66059


推荐阅读