sql - 在同一查询的两个表上使用别名删除[Postgres 9.5]

标签 sql postgresql sql-delete

我不确定这里出了什么问题:

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 时删除。

最佳答案

您似乎只想保留 clientserver 的每个组合的最新行。

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

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

关于sql - 在同一查询的两个表上使用别名删除[Postgres 9.5],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930521/

相关文章:

mysql - 升级到 Rails 5.2 后 from 子句中缺少表名

sql - 相当于 SQL Server 中的 PostgreSQL 类型 "timestamp without time zone"

php - 使用zend的Mysql删除查询

sql - 使用 SQL CASE 语句动态更改要选择的表

sql - 查找不在另一列中的 ID

sql - 通过 PostgreSQL 为数据库中的列设置默认值

ruby - 单表版本控制数据

mysql - 只保留表中分组列的最后两行

php - 当总行数超过一个数字时,从表中删除所有行

c# - MVC C# web 服务连接两个表并合并输出