2 votes

Postgresql : suppression des enregistrements en double par CompanyID et CustomerID

Je n'arrive pas à faire fonctionner la requête suivante. Elle fonctionne si je supprime la dernière ligne de la requête. Toute suggestion est la bienvenue.

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

0voto

Gordon Linoff Points 213350

Je pense à quelque chose comme ça :

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

C'est-à-dire que la corrélation se fait avec l'entreprise et le client, et non avec ce que l'on appelle l'engagement. Ceci est basé sur mon interprétation du titre de votre question.

0voto

GMB Points 188687

Lorsque j'exécute votre requête dans un fiddle, cela me donne :

erreur : la relation "ProjectMaster" n'existe pas

Voici quelques modifications qui peuvent être apportées pour éviter cette erreur, sans modifier la logique (que vous n'avez pas réellement expliquée) :

  • alias la table que vous insérez dans ( ua1 )
  • préfixez les champs de la dernière ligne avec la table à laquelle ils appartiennent ( ua1 o ua2 ?)
  • Débarrassez-vous de ces citations bruyantes

Cela fonctionne sans erreur de syntaxe :

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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X