Postgresql:按公司ID和客户ID删除重复记录

Postgresql:按公司ID和客户ID删除重复记录,postgresql,duplicates,sql-delete,Postgresql,Duplicates,Sql Delete,我无法使以下查询正常工作。如果我删除查询的最后一行,它将起作用。如有任何建议,我们将不胜感激 DELETE FROM "ProjectMaster" USING "ProjectMaster" ua2 WHERE "ProjectMaster"."EngagementName" = ua2."EngagementName" AND "ProjectMaster"."ProjectMasterID" < ua2."ProjectMasterID" AND "CompanyID" = 490

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

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

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

当我用小提琴运行你的查询时,它会给我:

错误:关系ProjectMaster不存在

以下是一些可以避免此错误的更改,而不改变您没有实际解释的逻辑:

为插入到ua1的表添加别名 在最后一行中的字段前面加上它们属于ua1或ua2的表? 摆脱这些嘈杂的引用 运行时不会出现语法错误:

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;

请描述你想做什么。样本数据和期望的结果会有所帮助。错误是什么message@rich我得到的错误是:错误:列引用CompanyID不明确是的,您给列添加了别名,然后使用了CompanyID和clientid,这两个变量都存在于同一个表中。因此,您需要指定希望companyid和clientid来自哪个表。目标:查找companyid=490和clientid 11125的所有重复记录,如果查询找到10条记录,5条良好记录,5条重复记录,它将删除5条重复记录。我想选择为整个公司或特定客户运行查询。这是一个有很多公司的多租户数据库,因此我必须按公司限制记录。谢谢你的快速回复!!澄清。我正在尝试按CompanyID和ClientID筛选记录,但在ProjectMaster表中查找具有重复EngagementNames的重复项。所以ProjectMaster中的每一行都有CompanyID、ClientID和EngagementName。您将无法在fiddle中运行。我使用的工具是Navicat,数据库是Postgres,引号是必需的。@Tim:是的,我明白。虽然我没有在我的答案中粘贴链接,但我还是在一个博士后的小提琴上进行了测试。如果您只是在我的查询中添加引号并运行它,它是否按预期工作?请澄清。我正在尝试按CompanyID和ClientID筛选记录,但在ProjectMaster表中查找具有重复EngagementNames的重复项。因此ProjectMaster中的每一行都有CompanyID、ClientID和EngagementName您的查询运行时不会出错,但会从ProjectMaster表中删除所有记录。它应该只删除重复项。6项记录:1040纳税准备,1040纳税准备,咨询,咨询,其他,其他。当然,这些行中的每一行都有CompanyID 490和ClientID 11125。此ClientID-11125只能保留3条记录。您的查询删除了所有6条记录。感谢@GMB通知我。我是新来的。接受-完成。我在这里找到了很多答案,但从未提出过任何问题。再次感谢!