#1 Tue 19 March 2024 15:38
- Alice.C
- Participant occasionnel
- Date d'inscription: 24 Sep 2015
- Messages: 15
PGSQL - Supprimer doublons d'une table
Bonjour,
J'ai une table géométrique avec des doublons. Je souhaiterais par une requête sql supprimer ces doublons, soit en fusionnant les entités soit en ne conservant qu'une ligne parmi les entités dupliquées.
Je pourrais recréer une nouvelle table à partir de la précédente, avec un GROUP BY. Mais j'ai une condition, si cela est possible, j'aimerais ne pas avoir à citer les noms de champs dans ma requête. Car je dois dupliquer cette requête à une cinquante de tables et ces tables sont susceptibles d'évoluer donc j'aimerais éviter une vérification des champs dans ma requête à chaque mise à jour de données.
Je suis donc plutôt partie sur l'idée d'un DELETE FROM mais je suis bloquée. Voici la requête.
Code:
DELETE FROM sup.sup_t1_ass_s_gpu_test WHERE "IDE" IN ( SELECT "IDE" FROM ref_gpu_sup_flux_tdlu.sup_t1_ass_s_gpu GROUP BY id,geom HAVING count(id)>1);
Cette requête fonctionne, dans le sens où elle supprime effectivement les doublons. Sauf qu'elle supprime toutes les versions de l'entité dupliquée.
Quelqu'un aurait il une piste ?
Bonne journée,
Hors ligne
#2 Tue 19 March 2024 16:45
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1542
Re: PGSQL - Supprimer doublons d'une table
Bonjour,
Il y a bcp de façons de faire pour supprimer les doublons.
Perso je passe par des tableaux (array) stockant les identifiants des geom identiques,
puis je delete depuis la table tous les identifiants qui sont dans le tableau sauf 1 (le premier par ex)
Avec des array, c'est facile de selectionner une sous partie du tableau, par ex tous les élements sauf le premier:
Code:
arr[2:array_length(arr, 1)]
Par ex:
On peut choisir l'ordre des ids dans le tableau si on veut, pour garder celui qu'on veut parmi les doublons, en faisant: array_agg(id order by ...) as ids
Code:
with tmp as ( select array_agg(id) as ids FROM ref_gpu_sup_flux_tdlu.sup_t1_ass_s_gpu group by geom having count(*) > 1 ) delete from ref_gpu_sup_flux_tdlu.sup_t1_ass_s_gpu s using tmp t where s.id = any(t.ids[2:array_length(t.ids, 1)]);
Nicolas
Hors ligne
#3 Tue 19 March 2024 17:06
- Alice.C
- Participant occasionnel
- Date d'inscription: 24 Sep 2015
- Messages: 15
Re: PGSQL - Supprimer doublons d'une table
Bonjour Nicolas,
Merci beaucoup pour la réponse, je viens de tester c'est parfait.
Je ne connaissais pas les tableaux, ils seront utiles pour améliorer mes requêtes.
Bonne fin de journée,
Hors ligne
#4 Thu 20 June 2024 10:19
- EssaMattou
- Juste Inscrit !
- Date d'inscription: 20 Jun 2024
- Messages: 1
Re: PGSQL - Supprimer doublons d'une table
Bonjour Nicolas,
Merci beaucoup pour la réponse, je viens de tester c'est parfait.
Je ne connaissais pas les tableaux, ils seront utiles pour améliorer mes requêtes.
Bonne fin de journée,
Non seulement vous, mais j’ai aussi reçu beaucoup d’aide ! Très utile
Hors ligne