PostgreSQL:通过CompanyID和CustomerID删除重复的记录

时间:2019-01-29 16:43:34

标签: postgresql duplicates sql-delete

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

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

2 个答案:

答案 0 :(得分:0)

我在想这样的事情:

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"
                          );

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

答案 1 :(得分:0)

当我在小提琴中运行您的查询时,它给了我:

  

错误:关系“ ProjectMaster”不存在

在不更改逻辑(您没有实际解释)的情况下,可以进行一些更改来避免此错误:

  • 为您插入(ua1)的表添加别名
  • 在最后一行的字段前面加上字段所属的表(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;