Bonjour,
Je souhaite supprimer les doublons d'une table. J'utilise pgadmin 4 et c'est du postgre sql.
Est-ce que quelqu'un aurait une syntaxe me permettant d'effectuer une suppression des doublons dans une table.
Merci d'avance.
Bonjour,
Je souhaite supprimer les doublons d'une table. J'utilise pgadmin 4 et c'est du postgre sql.
Est-ce que quelqu'un aurait une syntaxe me permettant d'effectuer une suppression des doublons dans une table.
Merci d'avance.
Par nature le SQL étant ensembliste, il est impossible de supprimer des doublons, sans modifier la structure de la table afin d'introduire une colonne de dédoublonnage, par exemple avec un auto incrément.
Commencez par modifier votre base et ensuite il vous sera possible de dédoublonner par exemple en utilisant le MAX de cette nouvelle colonne groupée par l'ensemble des autres colonnes, pour lequel le nombre d'élément est > 1 (HAVING COUNT(*) > 1)
À me lire : https://sqlpro.developpez.com/cours/doublons/
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
J'ai ajouté une colonne auto incrementé "idcol". J'essaie de supprimer les doublons avec cette fonction (trouvé sur le net), or j'ai une erreur de syntaxe sur ou près de « LEFT » d'après Pgadmin. Des solutions ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 DELETE FROM defeme LEFT OUTER JOIN ( SELECT MIN(idcol) as id, demand_iddema, copaip, nunati FROM defeme GROUP BY demand_iddema, copaip, nunati ) as t1 ON defeme.id = t1.id WHERE t1.id IS NULL
La syntaxe SQL de PostGreSQL étant limitée, les jointures dans le delete ne sont pas supportées vous devez utiliser une syntaxe du genre :
DELETE FROM MaTable
WHERE EXISTS(...)
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
si ,avec USING.
Du coup, si la table a un identifiant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 with cte as ( select id, ROW_NUMBER() over(partition by a,b order by id) as rn from LaTable ) delete from LaTable using cte where cte.id = LaTable.id and cte.rn > 1;
J'avais oublié les "rewritable" CTE qui sont une épouvante, alors que la norme SQL permet l'écriture de requête UPDATE directement dans une CTE :
Bizarre cette syntaxe hors norme de PostGreSQL alors que la norme est plus simple !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 with cte as ( select id, ROW_NUMBER() over(partition by a,b order by id) as rn from LaTable ) delete from LaTable where cte.id IN (SELECT id FROM cte WHER cte.rn > 1);
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager