#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: 1566
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

