Postgresql: удаление дубликатов записей по CompanyID и CustomerID - PullRequest
0 голосов
/ 29 января 2019

Я не могу заставить работать следующий запрос.Это будет работать, если я удалю последнюю строку запроса.Любые предложения приветствуются.

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

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Когда я запускаю ваш запрос в скрипте, он дает мне:

ошибка: отношение "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;
0 голосов
/ 29 января 2019

Я думаю, что-то вроде этого:

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

То есть корреляция для компании и клиента, а не для того, что называется вовлечением.Это основано на моей интерпретации названия вашего вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...