Postgresql:按 CompanyID 和 CustomerID 删除重复记录

Postgresql: deleting duplicate records by CompanyID and CustomerID

我无法使用以下查询。如果我删除查询的最后一行,它将起作用。非常感谢任何建议。

DELETE FROM "ProjectMaster"
USING "ProjectMaster" ua2
WHERE "ProjectMaster"."EngagementName" = ua2."EngagementName" 
AND "ProjectMaster"."ProjectMasterID" < ua2."ProjectMasterID"
AND "CompanyID" = 490 and "ClientID" = 11125

我在想这样的事情:

DELETE FROM "ProjectMaster"
WHERE "CompanyID" = 490 and "ClientID" = 11125 AND
      "ProjectMasterID" < (SELECT MAX(pm2."ProjectMasterID" 
                           FROM "ProjectMaster" pm2
                           WHERE pm2."CompanyID" = "ProjectMaster"."CompanyID" AND
                                 pm2."ClientID" = "ProjectMaster"."ClientID"
                          );

也就是说,相关性是针对公司和客户的,而不是所谓的参与度。这是基于我对你问题标题的解读。

当我 运行 你在 fiddle 中的查询时,它给了我:

error: relation "ProjectMaster" does not exist

这里有一些可以避免此错误的更改,而不改变逻辑(您实际上没有解释):

  • 别名插入到 (ua1)
  • 的 table
  • 在最后一行的字段前加上它们所属的 table(ua1ua2 ?)
  • 摆脱这些嘈杂的报价

这 运行 没有语法错误:

DELETE FROM ProjectMaster ua1
USING ProjectMaster ua2
WHERE 
    ua1.EngagementName = ua2.EngagementName
    AND ua1.ClientID = ua2.ClientID
    AND ua1.ProjectMasterID < ua2.ProjectMasterID
    AND ua1.CompanyID = 490 and ua1.ClientID = 11125;